混淆网格视图OnRowDeleting事件?

时间:2013-04-19 13:23:38

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

今天我遇到一个问题,当我从网格视图中删除基于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中删除记录至关重要? 我想清楚自己的想法吗?

1 个答案:

答案 0 :(得分:4)

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

OnRowDeleting="gridShow_RowDeleting"

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

修改

删除按钮,甚至GridView中的常规按钮,其中CommandName删除(此处就是这种情况),将自动尝试触发OnRowDeleting

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