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

VB.Net中DataGridView修改引发DataSource变化,是否与DataSet有关?

问题分析与解决方案

核心结论

和DataTable是否属于DataSet完全无关。DataGridView与DataTable的绑定默认就是双向同步的——修改DGV单元格值时,底层DataTable对应行的列值必然会跟着变,这是WinForms数据绑定的默认行为。

为什么其他窗体没出现这个现象?

你提到其他用SQL填充的DataTable改DGV值不影响数据源,大概率是这些窗体里的DataTable被做了特殊处理,常见情况:

  • SQL查询返回的是只读DataTable:比如用SqlDataAdapter.Fill()时,查询的是视图、设置了只读约束,或者代码里手动把DataTable的ReadOnly设为true
  • 代码里创建了DataTable的副本:比如用dataTable.Copy()或dataTable.Clone()后填充数据再绑定,或者绑定的是DataView且设置了只读,而你误以为绑定的是原DataTable
  • 其他窗体里的DGV设置了只读模式:比如DGV的ReadOnly属性设为true,或者列的ReadOnly设为true,导致无法修改,自然不会同步到数据源

解决方法(让JSON填充的DataTable不随DGV修改而变化)

如果需要让DGV修改时不影响原DataTable,有三种常用方式:

  1. 绑定DataTable的副本:
    // 假设jsonDataTable是你从JSON解析得到的原DataTable
    DataTable boundTable = jsonDataTable.Copy();
    dataGridView1.DataSource = boundTable;
    
    这样DGV修改的是副本,原DataTable不会被改动。
  2. 设置DataTable为只读:
    jsonDataTable.ReadOnly = true;
    dataGridView1.DataSource = jsonDataTable;
    
    这种方式下DGV也会变成只读,无法修改单元格值。
  3. 绑定只读DataView:
    DataView readOnlyView = new DataView(jsonDataTable);
    readOnlyView.AllowEdit = false;
    dataGridView1.DataSource = readOnlyView;
    
    这种方式可以保持DGV的外观,但禁止编辑,不会同步修改到原DataTable。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:25:58