GridView: получить ключ данных строки при нажатии кнопки - PullRequest
3 голосов
/ 23 августа 2010

Как я могу получить значение DataKeyName строки GridView, когда у меня есть кнопка внутри строки, которая имеет событие OnClick. В моем событии OnClick моей кнопки я хочу получить DataKeyName строки, в которой находится кнопка.

Возможно ли это?

<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?
}

Ответы [ 2 ]

5 голосов
/ 23 августа 2010

Когда я работаю с GridView, я обычно не использую событие OnClick для кнопок. Вместо этого я использую событие OnRowCommand в GridView и привязываю данные к свойству 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;
    // ...
}
2 голосов
/ 23 августа 2010

Вы можете привязать ключ к свойству CommandArgument кнопки и использовать свойство (sender as Button).CommandArgument в коде

...