Dav*_*ell 2 c# asp.net gridview
我有一个gridview,每行有按钮:

按钮位于模板字段中:
<asp:GridView ID="storyGridView" runat="server" AllowSorting="True" AutoGenerateColumns="False"
BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3"
CellSpacing="2" DataKeyNames="PK_NonScrumStory" DataSourceID="SqlDataSource1">
...
<asp:TemplateField HeaderText="Actions">
<ItemTemplate>
<asp:Button ID="viewHoursButton" runat="server" Text="View Hours" OnClick="viewHoursButton_OnClick" />
<asp:Button ID="addHoursButton" runat="server" Text="Add Hours" OnClick="addHoursButton_OnClick" />
<asp:Button ID="editButton" runat="server" Text="Edit" OnClick="editButton_OnClick" />
<asp:Button ID="deleteButton" runat="server" Text="Delete" OnClick="deleteButton_OnClick" />
</ItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)
如何在点击时获取数据密钥名称?
protected void viewHoursButton_OnClick(object sender, EventArgs e)
{
//get PK_NonScrumStory for clicked row
}
Run Code Online (Sandbox Code Playgroud)
我想到了:
protected void viewHoursButton_OnClick(object sender, EventArgs e)
{
Button btn = sender as Button;
GridViewRow row = btn.NamingContainer as GridViewRow;
string pk = storyGridView.DataKeys[row.RowIndex].Values[0].ToString();
System.Diagnostics.Debug.WriteLine(pk);
}
Run Code Online (Sandbox Code Playgroud)
您可以绑定CommandName和CommandArgument自定义按钮,例如:
<asp:Button ID="deleteButton"
runat="server"
Text="Delete"
CommandName="DeleteItem"
CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
OnClick="deleteButton_OnClick" />
Run Code Online (Sandbox Code Playgroud)
然后你应该实现事件storyGridView1_RowCommand,并处理每个命令:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "DeleteItem")
{
// Retrieve the row index stored in the
// CommandArgument property.
int index = Convert.ToInt32(e.CommandArgument);
// Retrieve the row that contains the button
// from the Rows collection.
GridViewRow row = GridView1.Rows[index];
//Retrieve the key of the row and delete the item
}
else if(e.CommandName == "EditItem")
{
//edit the item
}
//Other commands
}
Run Code Online (Sandbox Code Playgroud)