您有几个选项,这取决于您绑定到 gridview 的数据量,一个您可以在绑定时将数据集/数据表保存到 Session[""] 或者您可以在拥有后再次从数据库中检索数据行的唯一 ID。您可以在 gridview 上创建以下内容:
<asp:GridView ID="gvCustomer" runat="server"
AutoGenerateColumns="False" DataKeyNames="yourId" onrowcommand="gvCustomer_RowCommand">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkAction" runat="server" Text="Do Something" CommandName="yourEvent" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
然后在 RowCommand 事件背后的代码中有:
protected void gvCustomer_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "yourEvent")
{
var row = (GridViewRow)((LinkButton)e.CommandSource).NamingContainer;
int rowId = Convert.ToInt32(gvCustomer.DataKeys[row.RowIndex]["yourId"]);
}
}
此时,您拥有可以再次查询数据库或访问在绑定到 gridview 之前保存到会话中的数据源对象的 id
或者另一种选择是:
<asp:LinkButton CommandArgument='<%#Eval("PrimaryKey")%>' />
然后您可以在 gvCustomer_RowCommand 方法中使用 e.CommandArgument 获取 arg