3

今天,当我从网格视图中删除基于 id 的记录时,我遇到了一个问题,我为此使用了 OnRowCommand 事件。这是我的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”(您是否缺少 using 指令或程序集引用?)“

我很困惑为什么要使用 onrowcommand 事件在网格视图上添加 OnRowDeleting 事件?为什么我很困惑,因为如果我没有对这个事件做任何工作,那么为什么要使用这个事件?有没有办法只使用 onrowcommand 事件?或者添加 onrowdeleting 事件对于从 gridview 中删除记录是必不可少的?我想为此澄清一下?

4

1 回答 1

4

您的 aspx 标记GridView已在此处声明事件处理程序:

OnRowDeleting="gridShow_RowDeleting"

因此,当您尝试将其从 coedebehind 中删除时,您将得到该异常。因此,只需删除事件处理程序,您就可以将其从代码隐藏中删除。

编辑

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

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

于 2013-04-19T13:27:04.517 回答