欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net gridview的Rowcommand命令中获取行索引的方法总结

程序员文章站 2024-03-07 18:48:27
一、通过命令源获取当前行索引。 方法比较多, gridview 的 command 事件中无法象 datagrid 那样直接获取行, 法1, gridviewrow drv...
一、通过命令源获取当前行索引。

方法比较多, gridview 的 command 事件中无法象 datagrid 那样直接获取行,

法1,
gridviewrow drv = ((gridviewrow)(((button)(e.commandsource)).parent.parent));//commandsource 引起事件的命令源,(疑问,根据msdn说的是gridview,如果这样的话这样操作是错误的,但我得到的确实正确的,那说明得到的是button控件,等待以后查证).
drv.rowindex


二、通过在rowdatabound事件中把行索引绑定到控件的commandargument

由于事件参数 gridviewcommandeventargs 并不公开row属性指示当前行,(datagridcommandeventargs 公开 item 属性以获取当然 datagriditem,不知 asp.net team 是如何考虑这一设计的),因此需要一点“技巧”来获取此属性。

其实这是一个早就已知的问题,鉴于csdn里面每每有人疑惑,这里稍微整理下,便于参阅:

复制代码 代码如下:

protected void gridview1_rowcommand(object sender, gridviewcommandeventargs e)
{
int rowindex = -1;
gridviewrow row = null;
switch (e.commandname) ...{
case "command1": // 模板列
// 对于模板列内的按钮,我们需要显示绑定行索引到按钮的 commandargument 属性
// 以获取触发事件的行信息
rowindex = convert.toint32(e.commandargument);
row = gridview1.rows[rowindex];
displayinfo(row, e.commandname);
// your codes
//
break;
case "command2": // 模板列
// 同样处于模板列中,但不采用 command1 方式,而是通过 namingcontrainer 属性
// 直接获取当前的 gridviewrow
control cmdcontrol = e.commandsource as control; // 表示触发事件的 ibuttoncontrol,保持统一性并便于后续操作,我们这里直接转化为控件基类 control
row = cmdcontrol.namingcontainer as gridviewrow;
displayinfo(row, e.commandname);
// your codes
//
break;
case "command3": // 绑定列
// 对于 buttonfield 列,数据源控件内部自动以适当的项索引值填充 commandargument 属性。
// 而无需我们显示绑定其 commandargument 属性
// 注意,我们这里无法采用 command2 的方式,对于 buttonfield 触发的事件,
// gridviewcommandeventargs.commandsource 表示的包含此按钮的 gridview
rowindex = convert.toint32(e.commandargument);
row = gridview1.rows[rowindex];
displayinfo(row, e.commandname);
// your codes
//
break;
}
}