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)
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)