Просто чтобы добавить немного деталей к решению.Вам нужно использовать атрибут CommandName для кнопки, а затем создать обработчик событий для всего вида сетки.Указанное вами имя команды будет передано обработчику.Вы также можете динамически добавить команду arguemnt, которая также будет передана.Вот основы моего решения:
<asp:GridView ID="gvStudiesInProgress" DataSourceID="dsIncompleteStudies" AutoGenerateColumns="false" OnRowDataBound="gvStudiesInProgress_RowDataBound" OnRowCommand="gvStudiesInProgress_RowCommand">
<Columns>
<asp:BoundField DataField="physician.id" HeaderText="ID" />
<asp:BoundField DataField="physician.firstName" HeaderText="First Name" />
<asp:BoundField DataField="physician.lastName" HeaderText="Last Name" />
<asp:ButtonField HeaderText="Reopen Study?" ButtonType="Button" ControlStyle-CssClass="pure-button pure-button-success pure-button-small" Text="Reopen" CommandName="Reopen" />
</Columns>
</asp:GridView>
Теперь в моем коде я добавляю аргумент команды к моей кнопке, когда строка данных установлена:
protected void gvStudiesInProgress_RowDataBound(object sender, GridViewRowEventArgs e)
{
// Only perform these operations on datarows, skip the header
if (e.Row.RowType != DataControlRowType.DataRow)
return;
saveSet currSaveSet = (saveSet)e.Row.DataItem;
// Add the saveSetId attribute to the row's repoen button
((Button)e.Row.Cells[5].Controls[0]).CommandArgument = currSaveSet.saveSetId.ToString();
}
И, наконец,Я создаю обработчик событий для всего вида сетки и обрабатываю обратную передачу на основе имени команды и атрибутов аргумента команды.
protected void gvStudiesInProgress_RowCommand(object sender, GridViewCommandEventArgs e)
{
// Allow the Reopen button to trigger a study reset
if (e.CommandName == "Reopen")
{
bool reopened = DAL.reopenTimeStudy(int.Parse(e.CommandArgument.ToString()));
}
}
Пример с атрибутом CommandName мне очень помог: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.buttonfield.commandname(v=vs.110).aspx