对Grid view的OnRowDeleting事件感到困惑?

3

今天我在使用OnRowCommand事件从网格视图中按ID删除记录时遇到了问题。这是我的GridView代码:

<asp:GridView ID="gridShow" runat="server" AutoGenerateColumns="False" PageSize="5"
            AllowPaging="true" ShowHeader="false" OnRowCommand="s_index" OnRowDeleting="gridShow_RowDeleting">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:TextBox ID="txtID" runat="server" Text='<%#Eval("ID") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ItemStyle-Width="15%">
                    <ItemTemplate>
                        <asp:TextBox ID="txtDescription" runat="server" Text='<%#Eval("RollNumber") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:TextBox ID="txtFname" runat="server" Text='<%#Eval("FirstName") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ItemStyle-Width="15%">
                    <ItemTemplate>
                        <asp:TextBox ID="txtLname" runat="server" Text='<%#Eval("LastName") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ItemStyle-Width="15%">
                    <ItemTemplate>

                        <asp:TextBox ID="txtEmail" runat="server" Text='<%#Eval("Email") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ItemStyle-Width="15%">
                    <ItemTemplate>
                        <asp:Label ID="lblStatus" runat="server"></asp:Label>
                        <asp:HiddenField ID="hdnStatus" runat="server" Value='<%#Eval("UserName") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:LinkButton ID="lb" runat="server" Text="Delete" CommandName="delete" CommandArgument='<%#Eval("ID") %>'></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

这是我的C#代码:

 protected void s_index(object sender, GridViewCommandEventArgs e)
 {
     if (e.CommandName == "delete")
     {
         oSRegisterBLL.BLLdelete(Convert.ToInt32(e.CommandArgument));
         gview();
      }
  }
  protected void gridShow_RowDeleting(object sender, GridViewDeleteEventArgs e)
  {
  }

通过在我的网格视图上添加OnRowDeleting事件以及在代码后台定义该事件,我成功地完成了这项任务。但是当我第一次删除它时,我发现了一个问题:“ASP.datashow_aspx”不包含“gridShow_RowDeleting”的定义,并且找不到任何接受类型为“ASP.datashow_aspx”的第一个参数的扩展方法'gridShow_RowDeleting' (您是否缺少使用指令或程序集引用?)

我对此感到困惑,为什么要在gridview上添加OnRowDeleting事件和onrowcommand事件? 我感到困惑的原因是,如果我没有使用这个事件来做任何工作,那么为什么要使用这个事件? 有没有办法只使用onrowcommand事件来处理?还是必须添加onrowdeleting事件才能从gridview中删除记录? 我想澄清我的想法。

1个回答

4
您的 aspx 标记中声明了此处的事件处理程序:GridView
OnRowDeleting="gridShow_RowDeleting"

因此,当您试图从代码后端删除它时,会出现该异常。因此,只需删除事件处理程序,就可以将其从代码后端中删除。

编辑

GridView中具有一个删除按钮,甚至是常规按钮,其CommandName为delete(这里就是这种情况),将自动尝试触发OnRowDeleting

因此,即使您不使用它,也必须添加事件处理程序,或者您必须将CommandName重命名为例如"DeleteUser",否则会出现异常,如“GridView 'gridShow'触发了未处理的RowDeleting事件。”


我知道如果要从两侧删除它,但当我这样做时,会出现错误。这就是为什么我感到困惑。 - Ammar Asjad
@AmmarAsjad:我认为CommandName会导致事件处理程序成为强制性的,详见我的编辑。 - Tim Schmelter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接