行删除使用模板字段在 Gridview 上工作但抛出错误

Row deletion works on Gridview using template field but error thrown

我正在为我目前正在进行的项目编码,并且需要

  1. 向课程添加课程和批次
  2. 按需删除课程

同样使用 gridview。

我正在使用 OnRowCommand 事件,删除工作正常,条目也从数据库中删除,但由于某种原因,抛出此错误:

"The GridView 'gvCourses' fired event RowDeleting which wasn't handled."

注意:- 我没有在 aspx 文件中使用 'OnRowDeleting'。

这是一个奇怪的事情,我作为初学者不明白。当我生成 'OnRowDeleting' 事件并在后面的代码中将事件留空(事件处理程序中有 0 行代码)时,错误不再出现。

希望了解并了解发生这种情况的原因。任何帮助将不胜感激。

.aspx代码:

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
     <asp:Panel ID="Panel2" runat="server">
        <table style="width:100%;">
            <tr>
                <td style="width:210px">
                    &nbsp;</td>
                <td>
                    &nbsp;</td>
            </tr>
            <tr>
                <td style="width:210px">&nbsp;</td>
                <td>&nbsp;</td>
            </tr>
            <tr>
                <td style="width:210px; height: 331px;"></td>
                <td style="height: 331px">
                    <asp:GridView ID="gvCourses" runat="server"
                        AutoGenerateColumns="False" 
                        CssClass="table-hover table" 
                        GridLines="None" Width="800px" 
                        ShowFooter="True"
                        OnRowCommand="gvCourses_RowCommand" >
                        <Columns>
                            <asp:BoundField DataField="course"
                                HeaderText="Courses in Valsura"
                                SortExpression="DateField" />
                            <asp:TemplateField>
                                <FooterTemplate>
                                    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                                    <asp:DropDownList ID="DropDownList1" runat="server">
                                        <asp:ListItem>Select</asp:ListItem>
                                        <asp:ListItem>Students</asp:ListItem>                                            
                                        <asp:ListItem>Teachers</asp:ListItem>
                                    </asp:DropDownList>
                                    <asp:Button ID="Button1" runat="server"
                                        OnClick="Button1_Click" 
                                        Text="Add Course" 
                                        CssClass="btn-danger" />
                                </FooterTemplate>
                                <ItemTemplate>
                                    <asp:LinkButton ID="LinkButton2"
                                        runat="server">View Batches</asp:LinkButton>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField>
                                <ItemTemplate>
                                    <asp:LinkButton ID="LinkButton3"
                                        runat="server" 
                                        CommandName="delete"
                                        CommandArgument='<%#Eval ("course") %>'>Delete</asp:LinkButton>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                    <asp:RequiredFieldValidator ID="rfvCourse"
                        ControlToValidate="DropDownList1"
                        InitialValue="Select" 
                        ErrorMessage="Select*" 
                        ForeColor="Red" >
                    </asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr>
                <td style="width: 180px; height: 22px;"></td>
                <td style="height: 22px"></td>
                <td style="height: 22px"></td>
            </tr>
            <tr>
                <td style="width: 180px">&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
            </tr>
        </table>
    </asp:Panel>
</asp:Content>

.aspx.cs代码:(后面的代码,只包含必填项)

     protected void gvCourses_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "delete")
        {
            SqlConnection con = 
                new SqlConnection(ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString);
            DataTable dt = new DataTable();
            string query = 
                "delete from tblCourses where course='"+e.CommandArgument.ToString()+"'";
            SqlCommand cmd = new SqlCommand(query, con);
            con.Open();
            int n = cmd.ExecuteNonQuery();
            con.Close();
            gvCourses.DataSource = dt;
            gvCourses.DataBind();
            ViewState["query"] = "select course from tblCourses";
            bindgrid();
        }
 protected void bindgrid()
    {
        SqlConnection con = 
            new SqlConnection(ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString);
        DataTable dt = new DataTable();
        using (SqlDataAdapter sda = new SqlDataAdapter(ViewState["query"].ToString(), con))
        {
            sda.Fill(dt);
        }
        gvCourses.DataSource = dt;
        gvCourses.DataBind();
    }

页面看起来像这样(批次尚未编码)。

似乎有一些内置的 gridview 代码会在调用命令按钮时创建并触发 Delete。根据 this, this and this,您可以将名称从 Delete 更改为其他名称。否则,添加空事件处理程序。

顺便说一句,DataSets 具有内置的 CRUD 功能,它们 可以 更容易使用,但有些人不喜欢开销。