我正在开发一个C#asp.net 4.5网页。
我有一个GridView,我使用BoundFields和TemplateFields绑定了linq查询的结果。一切正常。
但是我在每行的TemplateField中都有一个ImageButton。我需要使用该按钮使用ImageButton所在行的数据键运行一些代码。
我尝试过使用DataKeyNames,但是当我调试DataKey时,值始终为null。
我也尝试过OnClick方法,但我不知道如何从GridView中检索密钥。
编辑:这是GridView代码
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BorderColor="#336699" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" Font-Names="Verdana" Font-Size="10pt"OnRowCreated="GridView1_RowCreated" DataKeyNames="titleid" EnablePersistedSelection="True" EnableViewState="False" >
这是ImageButton TemplateField:
<asp:TemplateField HeaderText ="Save">
<ItemTemplate>
<asp:ImageButton ID ="btnSave" runat="server" OnClick="btnSave_Click"CommandName="SaveTitle" ImageUrl="~/images/download.jpg" CommandArgument='<%# Container.DisplayIndex %>' />
</ItemTemplate>
</asp:TemplateField>
答案 0 :(得分:1)
不要尝试同时执行单击事件处理程序和命令名称,而只是尝试执行命令;像这样:
<ItemTemplate>
<asp:ImageButton ID ="btnSave" runat="server"
CommandName="SaveTitle"
ImageUrl="~/images/download.jpg"
CommandArgument='<%# Container.DisplayIndex %>' />
</ItemTemplate>
另外,请确保在网格视图中设置OnRowCommand
值,如下所示:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
BorderColor="#336699" BorderStyle="Solid" BorderWidth="1px"
CellPadding="3" Font-Names="Verdana"
Font-Size="10pt"
OnRowCreated="GridView1_RowCreated" DataKeyNames="titleid"
EnablePersistedSelection="True" EnableViewState="False"
OnRowCommand="GridView1_RowCommand">
最后,实现GridView1_RowCommand
方法,如下所示:
protected void GridView1_RowCommand(Object sender, GridViewCommandEventArgs e)
{
// If multiple buttons are used in a GridView control, use the
// CommandName property to determine which button was clicked.
if(e.CommandName == "SaveTitle")
{
// Do logic here to save title
}
}
更新:
不使用Container.DisplayIndex
作为命令参数,而是使用绑定源的TitleID
值(LINQ查询),如下所示:
<ItemTemplate>
<asp:ImageButton ID ="btnSave" runat="server"
CommandName="SaveTitle"
ImageUrl="~/images/download.jpg"
CommandArgument='<%# Eval("TitleID") %>' />
</ItemTemplate>
答案 1 :(得分:0)
您可以将DataKey Id而不是DataKeyNames传递给Image Button的CommandArgument以及您可以获得Button的点击事件的值,您可以在后面的代码中获得该值。
试试这个。
答案 2 :(得分:0)
string id =((ImageButton)sender).CommandArgument.ToString(); 试试这个