2010-08-23 30 views
1

当我在具有OnClick事件的行内有按钮时,如何获取GridView行的DataKeyName值。在我的按钮的OnClick事件中,我想获取按钮所在行的DataKeyName。GridView:获取按钮单击行上的数据键

这可能吗?

<asp:GridView ID="myGridView" run="server"> 
    <Columns> 
      <asp:TemplateField HeaderText="Column 1"> 
       <ItemTemplate> 
        ... bunch of html codes 
        <asp:Button ID="myButton" UseSubmitBehavior="false" runat="server" Text="Click Me" onclick="btnClick_Click" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

在我隐藏

protected void btnClick_Click(object sender, EventArgs e) 
{ 
    // How can I get the DataKeyName value of the Row that the Button was clicked? 
} 

回答

4

当我有一个GridView工作,我通常不使用按钮的事件OnClick。相反,我使用GridView上的OnRowCommand事件,并将数据绑定到按钮的CommandArgument属性。您可以从事件处理程序的GridViewCommandEventArgs参数中检索命令参数。

您可以使用CommandName参数来绑定任意字符串以区分您拥有的任何不同的。请注意,某些命令名称已用于其他事件,如“编辑”,“更新”,“取消”,“选择”和“删除”。

更新:

下面是一个例子,假设数据密钥被称为 “ID”:

<asp:GridView ID="myGridView" runat="server" OnRowCommand="myGridView_RowCommand"> 
    <Columns> 
      <asp:TemplateField HeaderText="Column 1"> 
       <ItemTemplate> 
        ... bunch of html codes 
        <asp:Button ID="myButton" runat="server" Text="Click Me" CommandName="ClickMe" CommandArgument='<%# Eval("ID") %>' /> 
       </ItemTemplate> 
      </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

而在后台代码:

protected void myGridView_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    var datakey = e.CommandArgument; 
    // ... 
} 
+0

甜!另外,我可以在这里使用按钮的'oncommand'事件,而不需要在GridView上放置一个'OnRowCommand'。谢谢。 – 2010-08-23 03:41:31

1

您可以绑定的关键按钮的CommandArgument属性,并消耗(sender as Button).CommandArgument属性代码

+0

关闭,除了常规的'EventArgs'没有'CommandArgument'属性。有必要订阅不同的事件来获取该财产。 – kbrimington 2010-08-23 03:23:05

+0

@kbrimington谢谢。编辑 – Midhat 2010-08-23 03:31:07

相关问题