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
相关产品推荐
相关产品推荐

