asp.net gridview的Rowcommand命令中获取行索引的方法总结
程序员文章站
2024-03-08 15:37:46
一、通过命令源获取当前行索引。 方法比较多, 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;
}
}
方法比较多, 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;
}
}