this.ddlUnit_SelectedIndexChanged(ddlUnit, e);///System.EventArgs是事件数据类的基类,基类中没有具体操作,所以可以直接作为参数。

解决方案 »

  1.   

    由于是局部过程,只能在内部调用
    btnQuery_Click(this, null)
    就可以了。
    如果想让其它类访问可以定义一个共用过程,并在此过程中放入此
    行代码,或直接改为public
      

  2.   

    加一句,设成public static,否则你得有那个类的实例
      

  3.   

    对不起,这些还不是我想要的。
    我写的事件处理方法中要用到传过去的参数,代码如下:
    private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    System.Data.DataTable tempTable = (System.Data.DataTable)ViewState["testTable"];
    this.DataGrid1.DataSource= tempTable;
    try
    {
    for(int i=0;i< tempTable.Columns.Count;i++)
    {
    tempTable.Rows[e.Item.ItemIndex][i]=((System.Web.UI.WebControls.TextBox)(e.Item.Cells[i+2].Controls[0])).Text;
    }
    this.DataGrid1.EditItemIndex= -1;
    ViewState["testTable"]=tempTable;
    }
    catch(System.Exception upe)
    {
    this.Page.RegisterStartupScript("","<script>alert('数据输入错误!')</script>");
    }
    fillDataGrid("select *  from the_table");
    }在这里是一个Datagrid对象的updata事件处理方法,在方法内部用到了参数e,来取当前选择的item.现在的问题是我想做一个按钮来调用这个方法,最难的是怎么传一个参数给它。
    我写了一个,但是出错:
    private void btnExec_Click(object sender, System.EventArgs e)
    {
    // this.fillDataGrid(this.txtSQLString.Text);
    this.DataGrid1_UpdateCommand(this,new System.Web.UI.WebControls.DataGridCommandEventArgs(this.DataGrid1.Items[this.DataGrid1.EditItemIndex],this.DataGrid1,null));

    }
    根据帮助我找到DataGridCommandEventArgs构造函数的三个参数:(MSDN)
    初始化 DataGridCommandEventArgs 类的新实例。[Visual Basic]
    Public Sub New( _
       ByVal item As DataGridItem, _
       ByVal commandSource As Object, _
       ByVal originalArgs As CommandEventArgs _
    )
    [C#]
    public DataGridCommandEventArgs(
       DataGridItem item,
       object commandSource,
       CommandEventArgs originalArgs
    );
    [C++]
    public: DataGridCommandEventArgs(
       DataGridItem* item,
       Object* commandSource,
       CommandEventArgs* originalArgs
    );
    [JScript]
    public function DataGridCommandEventArgs(
       item : DataGridItem,
       commandSource : Object,
       originalArgs : CommandEventArgs
    );
    参数
    item 
    一个 DataGridItem,它表示 DataGrid 中的选定项。 
    commandSource 
    命令的来源。 
    originalArgs 
    包含事件数据的 CommandEventArgs。 
    //--------------------------------
    但是我还是不知道怎么写
    请大家帮忙
      

  4.   

    你可以先试着在按钮中去触发updatecommand事件,而不必直接调用
      

  5.   

    两个办法:
    1。自己想办法触发该事件,可能会有副作用,比如联动
    2。直接调用该方法。关键在于构造两个参数。第一个好办,可以用this,也可以用调用处的本身的sender,主要是第二个比较难办,我刚才看了一下它的说明,发现要构造一个这个参数还挺费事。有好几层。尤其是其中如果包含数据就麻烦了,不知道它内部是传递什么数据过去的,还有commondname取什么值也不清楚。不过有个办法,你可以跟踪一下真实的触发过程,看看这个参数里都有那些数据,分析一下,然后自己构造一个System.Web.UI.WebControls.DataGridCommandEventArgs 就可以了
      

  6.   

    谢谢 matboy() 的发言,我已经这么做了,但是没有成功。还有, zhengguoc(爱之海洋)的方法我不明白该怎么触发事件,能不能说详细一点,谢谢。
      

  7.   

    你的问题关键是怎么取得e里面的Item,然后怎么在其他的Button_Click事件中去完成这个工作。而不是怎么去创建一个DataGridCommandEventArgs 事件数据对象。因为自己去创建这个对象又怎么知道里面Item值是多少呢?
    所以方法如下:
    private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
        ViewState["CurrenctIndex"]= e.Item.ItemIndex;//保存选取的行号

    }
    private void btnExec_Click(object sender, System.EventArgs e)
    {
        UpdateData();
    }private void UpdateData()
    {
    System.Data.DataTable tempTable = (System.Data.DataTable)ViewState["testTable"];
    this.DataGrid1.DataSource= tempTable;
             int currentIndex=Convert.Int32(ViewState["CurrenctIndex"]); //取得选取的行号
    try
    {
    for(int i=0;i< tempTable.Columns.Count;i++)
    {
    tempTable.Rows[currentIndex][i]=((System.Web.UI.WebControls.TextBox)(tempTable.Rows[currentIndex].Cells[i+2].Controls[0])).Text; //用currentIndex获得所选取的行
    }
    this.DataGrid1.EditItemIndex= -1;
    ViewState["testTable"]=tempTable;
    }
    catch(System.Exception upe)
    {
    this.Page.RegisterStartupScript("","<script>alert('数据输入错误!')</script>");
    }
    fillDataGrid("select *  from the_table");
    }
      

  8.   

    如果就是要调用这个按钮的Click事件,
    btnQuery.PerfromClick();
      

  9.   

    你最主要的问题不就是传参吗?
    用一个session将需要的数据保存起来,则在任何地方都可以显式的调用它!
    如session("item")=e.item
    取时:
    dim item as tablerow=session("item")
      

  10.   

    btnQuery_Click(sender,e);
    调用的地方要有同类型的两个参数!
      

  11.   

    那么说我不可能 “伪造”一个带有Item的参数去触发UpdateCommand事件了吗?