You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET GridView提交编辑后数据仍插入初始加载值问题求助

故障根因

该问题是ASP.NET Web Forms开发中的常见场景,核心原因是页面回发时未做判断重复绑定GridView,用户编辑的内容被初始数据覆盖:
页面事件执行顺序中,Page_Load事件优先级高于按钮点击事件,若GridView的初始绑定逻辑直接写在Page_Load中未加回发判断,点击提交按钮触发回发时,会先重新从数据库拉取初始数据覆盖用户编辑的内容,再执行插入逻辑,最终入库的自然还是初始值。

修复方案
  1. 调整Page_Load逻辑,仅首次加载页面时绑定GridView数据:
protected void Page_Load(object sender, EventArgs e)
{
    // 仅非回发状态下绑定初始数据
    if (!IsPostBack)
    {
        // 此处放置你原有的GridView绑定逻辑,示例如下:
        // GridView1.DataSource = GetDataFromDB(); // 从数据库拉取初始数据的方法
        // GridView1.DataBind();
    }
}
  1. 可选优化:原代码的SQL拼接写法存在SQL注入风险,建议改为参数化查询,同时优化数据库连接的使用效率,修改后的提交逻辑参考:
protected void Submit_Data(object sender, EventArgs e)
{
    // 连接对象提到循环外复用,避免重复创建销毁的性能开销
    using (SqlConnection con = new SqlConnection(getConn()))
    {
        con.Open();
        foreach (GridViewRow row in GridView1.Rows)
        {                      
            string insertSql = @"insert into test ([Sales Order Id],[input data],Material_Name,[Part Number],id,GL_Account) 
                        values (@SalesOrderId, @InputData, @MaterialName, @PartNumber, @Id, @GLAccount)";
            using (SqlCommand com = new SqlCommand(insertSql, con))
            {
                // 按需调整参数的类型和长度,以下为示例
                com.Parameters.AddWithValue("@SalesOrderId", sales_order_id);
                com.Parameters.AddWithValue("@InputData", input_id);
                com.Parameters.AddWithValue("@MaterialName", row.Cells[0].Text);
                com.Parameters.AddWithValue("@PartNumber", row.Cells[1].Text);
                com.Parameters.AddWithValue("@Id", ((TextBox)row.FindControl("txtedit")).Text);
                com.Parameters.AddWithValue("@GLAccount", row.Cells[3].Text);
                com.ExecuteNonQuery();
            }
        }
    }
}

效果参考图:
GridView加载初始状态
编辑后预期入库效果

内容的提问来源于stack exchange,提问作者Mrin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:48:03