【问题标题】:edit gridview at run time在运行时编辑gridview
【发布时间】:2014-08-12 03:04:04
【问题描述】:

我需要从数据库中检索记录并将其显示在网格视图中。然后我需要编辑该特定记录。但是,当我尝试这样做时,会发生以下错误。

“GridView 'GridView1' 触发了未处理的事件 RowEditing。”

任何帮助将不胜感激。我正在尝试的代码如下。

ASP 页面:

<div>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" EnableModelValidation="True" >
        <Columns>
            <asp:BoundField DataField="empid" HeaderText="id" />
            <asp:TemplateField HeaderText="name">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox2" runat="server" Text='<%# Eval("name") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Eval("name") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="age">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox3" runat="server" Text='<%# Eval("age") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Eval("age") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="gender">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox4" runat="server" Text='<%# Eval("gender") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label3" runat="server" Text='<%# Eval("gender") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="mobile">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox5" runat="server" Text='<%# Eval("mobile") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label4" runat="server" Text='<%# Eval("mobile") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="qual">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox6" runat="server" Text='<%# Eval("qual") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label5" runat="server" Text='<%# Eval("qual") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:CommandField ShowEditButton="true" ShowCancelButton="true" />
        </Columns>
    </asp:GridView>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testdb%>" UpdateCommand="update [empdetails] SET [name]=@name,[age]=@age,[gender]=@gender,[mobile]=@mobile,[qual]=@qual WHERE [empid]=@id">
        <UpdateParameters>
            <asp:Parameter Name="name" type="String" />
            <asp:Parameter Name="age" Type="Int32" />
            <asp:Parameter Name="gender" Type="String" />
            <asp:Parameter Name="mobile" Type="Int32" />
            <asp:Parameter Name="qual" Type="String" />
        </UpdateParameters>

    </asp:SqlDataSource>
</div>

代码隐藏:

protected void Button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(constr);
    SqlCommand cmd = new SqlCommand("select * from empdetails where empid ='" + TextBox1.Text + "'", con);
    con.Open();
    SqlDataReader dr = cmd.ExecuteReader();
    GridView1.DataSource = dr;
    GridView1.DataBind();
    con.Close();
}

【问题讨论】:

  • 花点时间阅读帮助中心的editing help。 Stack Overflow 上的格式设置与其他站点不同。您的帖子看起来越好,用户就越容易为您提供帮助。

标签: c# asp.net sql-server-2008 gridview


【解决方案1】:

像你一样显示编辑按钮:

<asp:CommandField ShowEditButton="true" ShowCancelButton="true" />

它期望在RowEditing 事件中处理它。您需要添加此处理程序来设置您正在编辑的行的索引。

<asp:GridView ID="GridView1" runat="server"
    AutoGenerateColumns="False"
    EnableModelValidation="True"
    OnRowEditing="GridView1_RowEditing">
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
    //Set the edit index.
    GridView1.EditIndex = e.NewEditIndex;
    //Bind data to the GridView control.
    BindData();
}

【讨论】:

    【解决方案2】:

    您应该了解 ADO.NET 参数以及如何准备它们:

    var data = new DataTable();
    using (var conn = new SqlConnection(constr))
    {
        try
        {
            conn.Open();
            var cmd = new SqlCommand("dbo.pr_EC_SportsGroups_Search_Students", conn);
            cmd.Text = "select * from empdetails where empid = @empId";
    
    
            var empId = TextBox1.Text;
            cmd.Parameters.AddWithValue("@empId", empId);
    
            //create sql adapter by passing command object
            var adapter = new SqlDataAdapter(cmd);
            //fill the data table
            adapter.Fill(data);
    
            //bind data
            GridView1.DataSource = data;
            GridView1.DataBind();
        }
    
        catch (Exception ex)
        {
            Response.Write(ex.ToString());
        }
    
    }
    

    至于错误本身,您只需将事件添加到您的标记中,请参阅@j.f 答案以获取更多信息。

    【讨论】:

    • @j.f.我删除了我从未见过这样的行,但你是对的。
    • 好交易。我知道这一点的唯一原因是因为我以前见过。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2011-09-14
    • 1970-01-01
    • 2013-09-15
    相关资源
    最近更新 更多