在GridView RowCommand中获取DataKey值

Far*_*nha 51 asp.net events gridview rowcommand datakey

我有一个GridView与关联DataKey,这是项目ID.如何在RowCommand事件中检索该值?

这似乎有效,但我不喜欢演员LinkButton(如果其他命令正在触发事件怎么办?),我对这一点并不太自信NamingContainer.

LinkButton lb = (LinkButton)e.CommandSource;
GridViewRow gvr = (GridViewRow)lb.NamingContainer;
int id = (int)grid.DataKeys[gvr.RowIndex].Value;
Run Code Online (Sandbox Code Playgroud)

我知道我可以改为传递那个ID CommandArgument,但我选择使用它DataKey来给我更大的灵活性.

我也知道可以为ID使用隐藏字段,但我认为这是一个我不想使用的黑客.

小智 89

我通常通过CommandArgument传递RowIndex并使用它来检索我想要的DataKey值.

在按钮上:

CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'
Run Code Online (Sandbox Code Playgroud)

在服务器事件上

int rowIndex = int.Parse(e.CommandArgument.ToString());
string val = (string)this.grid.DataKeys[rowIndex]["myKey"];
Run Code Online (Sandbox Code Playgroud)


Mic*_*iel 31

我设法使用此代码获取DataKeys的值:

在GridView中我添加了:

DataKeyNames="ID" OnRowCommand="myRowCommand"
Run Code Online (Sandbox Code Playgroud)

然后在我的行命令功能:

protected void myRowCommand(object sender, GridViewCommandEventArgs e) 
{
    LinkButton lnkBtn = (LinkButton)e.CommandSource;    // the button
    GridViewRow myRow = (GridViewRow)lnkBtn.Parent.Parent;  // the row
    GridView myGrid = (GridView)sender; // the gridview
    string ID = myGrid.DataKeys[myRow.RowIndex].Value.ToString(); // value of the datakey 

    switch (e.CommandName)
    {
      case "cmd1":
      // do something using the ID
      break;
      case "cmd2":
      // do something else using the ID
      break;
    }
 }
Run Code Online (Sandbox Code Playgroud)

  • 当我使用多个datakeys时,我建议使用:string ID = myGrid.DataKeys [myRow.RowIndex] .Values("ID").ToString() (3认同)

Zul*_*lil 12

foreach (GridViewRow gvr in gvMyGridView.Rows)
{
    string PrimaryKey = gvMyGridView.DataKeys[gvr.RowIndex].Values[0].ToString();
}
Run Code Online (Sandbox Code Playgroud)

您可以在使用foreach或执行任何GridView事件的迭代时使用此代码OnRowDataBound.

在这里,您可以DataKeyNames通过用逗号分隔来输入多个值,.例如,DataKeyNames="ProductID,ItemID,OrderID".

您现在可以DataKeys通过提供其索引来访问每个索引,如下所示:

string ProductID = gvMyGridView.DataKeys[gvr.RowIndex].Values[0].ToString();
string ItemID = gvMyGridView.DataKeys[gvr.RowIndex].Values[1].ToString();
string OrderID = gvMyGridView.DataKeys[gvr.RowIndex].Values[2].ToString();
Run Code Online (Sandbox Code Playgroud)

您还可以使用键名而不是索引来从DataKeyNames集合中获取值,如下所示:

string ProductID = gvMyGridView.DataKeys[gvr.RowIndex].Values["ProductID"].ToString();
string ItemID = gvMyGridView.DataKeys[gvr.RowIndex].Values["ItemID"].ToString();
string OrderID = gvMyGridView.DataKeys[gvr.RowIndex].Values["OrderID"].ToString();
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以这样做:

string id = GridName.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();
Run Code Online (Sandbox Code Playgroud)

  • 不,这还不够.`CommandArgument`的初始值不是行ID,而是空字符串. (2认同)