c# - 使用绑定(bind)字段时如何更新 GridView

标签 c# asp.net sql gridview

我有一个 GridView 并且它绑定(bind)到数据库。我发现更新 GridView 和数据库中相应的表很困难。

绑定(bind)到 SQLdatasource 后我的 GridView 的 asp 代码是:

<asp:GridView ID="GridView2" runat="server" OnRowEditing="GridView2_RowEditing"
    OnRowUpdating="GridView2_RowUpdating" CellPadding="4" ForeColor="#333333" OnRowCancelingEdit="GridView2_RowCancelingEdit"
    OnRowDataBound="GridView2_RowDataBound" AutoGenerateColumns="False" 
    DataSourceID="SqlDataSource1" AutoGenerateEditButton="True" DataKeyNames="Locations">
    <Columns>
        <asp:BoundField DataField="Locations" HeaderText="Locations" 
            SortExpression="Locations" ReadOnly="true"/>
        <asp:BoundField DataField="Lamp_pro4" HeaderText="Lamp_pro4" 
            SortExpression="Lamp_pro4" />
        <asp:BoundField DataField="Lamp_pro5" HeaderText="Lamp_pro5" 
            SortExpression="Lamp_pro5" />
        <asp:BoundField DataField="AC_Profile5" HeaderText="AC_Profile5" 
            SortExpression="AC_Profile5" />
    </Columns>

</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:TouchPadConnectionString %>" 
    SelectCommand="SELECT * FROM [Quantity]">
</asp:SqlDataSource>

我的数据键是 Locations 并且它是只读的。

更新的.cs代码是:

protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        SqlConnection con = new SqlConnection("Data Source=ARCHANA-PC\\ARCHANA;Initial Catalog=TouchPad;Integrated Security=True");
        string LocName = GridView2.DataKeys[e.RowIndex].Values["Locations"].ToString();
        TextBox txt1 = (TextBox)GridView2.Rows[e.RowIndex].FindControl("Lamp_pro4");
        TextBox txt2 = (TextBox)GridView2.Rows[e.RowIndex].FindControl("Lamp_pro5");
        TextBox txt3 = (TextBox)GridView2.Rows[e.RowIndex].FindControl("AC_Profile5");
        string updStmt = "UPDATE Quantity set Lamp_pro4=@Lamp_pro4,Lamp_pro5=@Lamp_pro5,AC_Profile5=@AC_Profile5 where Locations=@locName";

        con.Open();
        SqlCommand updCmd = new SqlCommand(updStmt, con);

        updCmd.Parameters.AddWithValue("@locName", LocName);
        updCmd.Parameters.AddWithValue("@Lamp_pro4", txt1.Text);
        updCmd.Parameters.AddWithValue("@Lamp_pro5", txt2.Text);
        updCmd.Parameters.AddWithValue("@AC_Profile5", txt3.Text);
        updCmd.ExecuteNonQuery();
        GridView2.DataBind();

    }

最佳答案

1) 您必须在处理结束时调用 GridView2.DataBind()

protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    //GridViewRow row = (GridViewRow)GridView2.Rows[e.RowIndex];

    string LocName = GridView2.DataKeys[e.RowIndex].Values["Locations"].ToString();
    TextBox txt1 = (TextBox)GridView2.Rows[e.RowIndex].FindControl("Lamp_pro4");
    TextBox txt2 = (TextBox)GridView2.Rows[e.RowIndex].FindControl("Lamp_pro5");
    TextBox txt3 = (TextBox)GridView2.Rows[e.RowIndex].FindControl("AC_Profile5");
    con.Open();
    SqlCommand cmd = new SqlCommand("UPDATE Quantity set Lamp_pro4='" + txt1.Text + "',Lamp_pro5='" + txt2.Text + "',AC_Profile5='" + txt3.Text + "' where Locations=" + LocName, con);
    cmd.ExecuteNonQuery();
    con.Close();

    GridView2.EditIndex = -1;
    //BindQuantity();
    GridView2.DataBind();
}

2) 在 SqlDataSource 上定义 UpdateCommand

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:TouchPadConnectionString %>" 
    SelectCommand="SELECT * FROM [Quantity]"
    UpdateCommand="UPDATE Quantity set Lamp_pro4 = @Lamp_pro4 ,Lamp_pro5=@Lamp_pro5,AC_Profile5=@AC_Profile5 where Locations=@Locations">
</asp:SqlDataSource>

链接:http://msdn.microsoft.com/fr-fr/library/system.web.ui.webcontrols.sqldatasource.updatecommand.aspx

关于c# - 使用绑定(bind)字段时如何更新 GridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12221055/

相关文章:

sql - 检查给定组的多列中的值

php - 检查两个表中两列的值是否相等然后返回

c# - 使用 .NET Framework 4.6.1 构建 .NET 标准库 1.4,无需 Visual Studio

c# - 如何使用 MouseMove 事件绘制单线

C# - 如何调用添加到项目中的 exe 解决方案

asp.net - 如何对等待另一个异步任务的 AsyncTask 进行单元测试?

asp.net - Visual Studio 2015 的项目模板

c# - Selenium 测试失败时捕获错误消息

c# - 唯一标识一个浏览器共享 session 状态的两个实例?

mysql - 选择最佳输出