asp.NetgridviewのRowcommandコマンドでローインデックスを取得する方法のまとめ

2054 ワード

一、コマンドソースから現在のローインデックスを取得する.
方法が多く、GridViewのCommandイベントではDataGridのように行を直接取得することができず、
法1,
GridViewRow drv = ((GridViewRow)(((Button)(e.CommandSource)).Parent.Parent));//CommandSourceによるイベントのコマンドソース、(疑問ですが、MSDNによるとGridViewとのことですが、これでは操作が間違っていますが、私が得たのは確かに正しいです.それはBUttonコントロールで、後で検証するのを待っています)
drv.RowIndex
二、RowDataBoundイベントでラインインデックスをコントロールのCommandArgumentにバインドする
イベントパラメータGridViewCommandEventArgsは、Row属性が現在の行を示すことを開示していないため(DataGridCommandEventArgsは、当然のDataGridItemを取得するためにItem属性を開示しているが、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;
}
}