怎么直接调用事件处理方法? this.ddlUnit_SelectedIndexChanged(ddlUnit, e);///System.EventArgs是事件数据类的基类,基类中没有具体操作,所以可以直接作为参数。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 由于是局部过程,只能在内部调用btnQuery_Click(this, null)就可以了。如果想让其它类访问可以定义一个共用过程,并在此过程中放入此行代码,或直接改为public 加一句,设成public static,否则你得有那个类的实例 对不起,这些还不是我想要的。我写的事件处理方法中要用到传过去的参数,代码如下: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。 //--------------------------------但是我还是不知道怎么写请大家帮忙 你可以先试着在按钮中去触发updatecommand事件,而不必直接调用 两个办法:1。自己想办法触发该事件,可能会有副作用,比如联动2。直接调用该方法。关键在于构造两个参数。第一个好办,可以用this,也可以用调用处的本身的sender,主要是第二个比较难办,我刚才看了一下它的说明,发现要构造一个这个参数还挺费事。有好几层。尤其是其中如果包含数据就麻烦了,不知道它内部是传递什么数据过去的,还有commondname取什么值也不清楚。不过有个办法,你可以跟踪一下真实的触发过程,看看这个参数里都有那些数据,分析一下,然后自己构造一个System.Web.UI.WebControls.DataGridCommandEventArgs 就可以了 谢谢 matboy() 的发言,我已经这么做了,但是没有成功。还有, zhengguoc(爱之海洋)的方法我不明白该怎么触发事件,能不能说详细一点,谢谢。 你的问题关键是怎么取得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");} 如果就是要调用这个按钮的Click事件,btnQuery.PerfromClick(); 你最主要的问题不就是传参吗?用一个session将需要的数据保存起来,则在任何地方都可以显式的调用它!如session("item")=e.item取时:dim item as tablerow=session("item") btnQuery_Click(sender,e);调用的地方要有同类型的两个参数! 那么说我不可能 “伪造”一个带有Item的参数去触发UpdateCommand事件了吗? 关于Datatable的一些操作 如何得到CheckedBoxList某项的值 结构体中,可以包含方法吗?如何计算结构体的大小? 如何用C#做一个读取已有视频格式,视频宽与高编码? 请问如何使用Aximp.exe将现有的OCX控件转换成windows窗体可识别的form控件? treeView节点显示 求助 为什么 Delphi.Net 可以做到,而C#却不行呢? 如何基于ssl协议发送socket呢? 自己生成的bitmap图像在显示时有一条杂色的线,怎么回事啊? 朋友们帮忙了,如何设置DataGrid 中列的宽度 和行的高度 ? 关于切换输入法的问题,紧急!!!
btnQuery_Click(this, null)
就可以了。
如果想让其它类访问可以定义一个共用过程,并在此过程中放入此
行代码,或直接改为public
我写的事件处理方法中要用到传过去的参数,代码如下:
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。
//--------------------------------
但是我还是不知道怎么写
请大家帮忙
1。自己想办法触发该事件,可能会有副作用,比如联动
2。直接调用该方法。关键在于构造两个参数。第一个好办,可以用this,也可以用调用处的本身的sender,主要是第二个比较难办,我刚才看了一下它的说明,发现要构造一个这个参数还挺费事。有好几层。尤其是其中如果包含数据就麻烦了,不知道它内部是传递什么数据过去的,还有commondname取什么值也不清楚。不过有个办法,你可以跟踪一下真实的触发过程,看看这个参数里都有那些数据,分析一下,然后自己构造一个System.Web.UI.WebControls.DataGridCommandEventArgs 就可以了
所以方法如下:
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");
}
btnQuery.PerfromClick();
用一个session将需要的数据保存起来,则在任何地方都可以显式的调用它!
如session("item")=e.item
取时:
dim item as tablerow=session("item")
调用的地方要有同类型的两个参数!