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

WinForms(VS2010 C#):如何将DataGridView修改后的数据更新至DataSet

嘿,这个问题我熟!在VS2010的WinForms项目里,DataGridView和DataSet的联动其实挺直观的,不管是自动实时同步还是按钮触发更新都能轻松实现,我给你拆解两种场景:

一、自动更新到DataSet(实时同步)

其实当你把DataGridView和DataSet里的DataTable做双向绑定后,用户在DataGridView里的修改默认就会自动同步到DataSet,只是有个小细节:修改会在单元格失去焦点(比如点击其他单元格、按回车)的时候才会正式提交到DataSet对应的DataRow中。

给你一个简单的绑定示例,一般在窗体加载时完成:

private void Form1_Load(object sender, EventArgs e)
{
    // 假设你已经初始化好了DataSet实例ds,且其中包含名为"Customers"的DataTable
    // 绑定DataGridView到DataSet的DataTable
    dataGridView1.DataSource = ds.Tables["Customers"];

    // 可选:如果希望单元格编辑完成后立即同步(不用等失去焦点),可以绑定CellEndEdit事件
    dataGridView1.CellEndEdit += DataGridView1_CellEndEdit;
}

private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    // 强制结束当前编辑会话,确保修改立刻同步到DataSet
    dataGridView1.EndEdit();
}

验证的话,你可以在修改后直接通过ds.Tables["Customers"].Rows[e.RowIndex]["你的列名"]来查看DataSet里的内容,已经是更新后的值了。

二、按钮触发手动更新(批量确认后同步)

如果需要让用户确认后再完成同步(比如避免误操作),可以通过按钮触发,核心是先确保DataGridView里所有未提交的编辑都同步到DataSet,再做后续逻辑:

private void btnSyncToDataSet_Click(object sender, EventArgs e)
{
    // 第一步:结束所有未完成的编辑,把DataGridView里的修改全部同步到DataSet
    dataGridView1.EndEdit();

    // 第二步:(可选)可以检查DataSet里的修改情况,比如获取所有被修改的行
    DataTable targetTable = ds.Tables["Customers"];
    DataRow[] modifiedRows = targetTable.Select(null, null, DataViewRowState.ModifiedCurrent);

    // 这里可以加自定义逻辑,比如提示用户修改数量
    MessageBox.Show($"已成功同步{modifiedRows.Length}行修改到DataSet");

    // 如果之后要把DataSet的修改保存到数据库,这里可以继续用DataAdapter.Update(targetTable),但同步到DataSet的操作到这一步就完成了
}
一些额外注意事项
  • 要确保DataGridView的ReadOnly属性是false(默认就是false),否则无法编辑内容。
  • 如果绑定的是DataView,修改同样会同步到对应的DataTable(也就是DataSet里)。
  • 如果需要撤销DataSet里的未提交修改,可以调用targetTable.RejectChanges()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:37:48