【问题标题】:Confused with Grid view OnRowDeleting Event?对网格视图 OnRowDeleting 事件感到困惑?
【发布时间】:2013-04-19 13:23:37
【问题描述】:

今天,当我从网格视图中删除基于 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”并且没有扩展方法“gridShow_RowDeleting”接受“ASP.datashow_aspx”类型的第一个参数(您是否缺少 using 指令或程序集引用?)“

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

【问题讨论】:

    标签: asp.net visual-studio-2010 c#-4.0 gridview


    【解决方案1】:

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

    OnRowDeleting="gridShow_RowDeleting"
    

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

    编辑

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

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

    【讨论】:

    • 我知道我是否必须从两侧删除它,但是当我这样做时会出错。这就是为什么我很困惑。
    • @AmmarAsjad:我认为 CommandName 导致事件处理程序是强制性的,请参阅我的编辑。
    猜你喜欢
    • 2013-07-04
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多