【发布时间】:2013-12-15 00:04:22
【问题描述】:
我的任务是绑定两个 DataGridView,主要问题是当我将 BindingSource 数据源转换为 DataSet 时,我看不到更改em>(我需要这个用于 SqlDataAdapter)。
我可以通过删除 db 表内容来解决这个问题,但这不适合我。
我可以捕捉到这些事件,但我需要在处理表单时更新数据库。
var bs = (BindingSource)dataGridView1.DataSource;
var set = (DataSet)bs.DataSource; //here DataSet HasChanges() method always returns true
当我在 SqlDataAdapter 中使用 DataSet 中的表时,Update() 和 Fill() 方法会为我执行插入操作,因为值始终显示为新值。 p>
虽然解释得很对,但我希望我成功了。
谢谢。
编辑
通过在类级别初始化 DataSet 并添加 AcceptChanges 方法来修复它。 还从 BindingSource 中删除了强制转换。
DataSet的初始化代码sn-p:
dataSetT = new DataSet();
dataSetT.ReadXmlSchema(xmlSchemeFile);
dataSetT.ReadXml(populateDataSet == null ? xmlSchemeFile : xmlDataFile, XmlReadMode.IgnoreSchema);
var autoSource = new BindingSource();
var repairSource = new BindingSource();
autoSource.DataSource = dataSetT;
autoSource.DataMember = "Auto";
repairSource.DataSource = autoSource;
repairSource.DataMember = "VIN_FK";
dataGridView1.AutoGenerateColumns = true;
dataGridView2.AutoGenerateColumns = true;
dataGridView1.DataSource = autoSource;
dataGridView2.DataSource = repairSource;
dataSetT.AcceptChanges();
现在使用 AcceptChanges 方法 dataSetT.HasChanges() 返回一个实际值。然后我使用 DataAdapter 更新方法。
结案。
【问题讨论】:
标签: c# datagridview datasource bindingsource sqldataadapter