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

DataGridView清除失效 重新绑定数据源仍显示用户编辑内容如何解决?

问题根源

  • WinForm的DataGridView与DataTable默认是双向绑定关系,你在界面上对控件做的新增、删除、修改操作,会直接同步到绑定的内存对象modelDS.Tables[0]中。你重新绑定的始终是已经被修改过的同一个DataTable对象,自然不会显示原始数据。
  • 你测试的清空方法不生效还有语法层面的问题:代码中存在大量拼写错误(比如控件名datagridView18/datagridview18/datagrdiview18拼写不一致、方法调用缺少括号和分号、关键字拼写错误如retrun),运行时会抛出异常,后续的绑定逻辑根本不会执行,看起来就像清空操作无效。

修复方案

你可以根据业务场景选择以下任意一种方案实现:

方案1:回滚DataTable的修改(最简单)

DataTable默认会跟踪所有未提交的变更,直接调用回滚方法即可恢复到初始加载状态,不需要额外存储备份:

private void button1_Click (object sender, EventArgs e)
{
    DataTable dt = (DataTable)dataGridView18.DataSource;
    // 回滚所有未提交的修改,直接恢复到初始加载的原始数据状态
    dt.RejectChanges();
}

方案2:每次重载重新查询数据库

每次点击重载按钮时重新从数据库拉取最新的原始数据,避免复用被修改过的内存缓存:

private void button1_Click (object sender, EventArgs e)
{
    // 重新从数据库查询原始数据
    modelDS = db.getModelList();
    dataGridView18.DataSource = null;
    dataGridView18.DataSource = modelDS.Tables[0];
}

方案3:初始加载时保留原始数据备份

第一次加载数据时就备份原始数据,重载时用备份恢复数据源即可:

private DataSet modelDS = null;
// 新增字段存储原始数据备份
private DataTable originalModelTable = null;

// 初始加载逻辑
modelDS = db.getModelList();
// 复制原始数据存为备份,避免备份被后续修改污染
originalModelTable = modelDS.Tables[0].Copy();
dataGridView18.DataSource = modelDS.Tables[0];

private void button1_Click (object sender, EventArgs e)
{
    dataGridView18.DataSource = null;
    // 用备份恢复数据源,每次恢复都复制新的对象,防止备份被修改
    modelDS.Tables[0] = originalModelTable.Copy();
    dataGridView18.DataSource = modelDS.Tables[0];
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 06:36:05