gridview中的imagebutton ...无法获得正确的行键

时间:2013-12-24 16:04:02

标签: c# asp.net .net gridview

我正在开发一个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>

3 个答案:

答案 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(); 试试这个