【问题标题】:Row deletion works on Gridview using template field but error thrown使用模板字段在 Gridview 上进行行删除但抛出错误
【发布时间】:2018-11-17 17:58:45
【问题描述】:

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

  1. 将课程和批次添加到课程中
  2. 按需删除课程

同样使用gridview。

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

“GridView 'gvCourses' 触发了未处理的事件 RowDeleting。”

注意:- 我没有在 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();
    }

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

【问题讨论】:

    标签: c# asp.net gridview webforms templatefield


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢你。你回答的正是我想弄清楚的:)
    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多