数据绑定,具有数据关系的数据集,以及从DB刷新单个DataTable

时间:2009-09-02 14:18:08

标签: c# data-binding merge datatable dataset

简而言之:我有一个内部有多个DataTable的DataSet,它们通过多个DataRelations连接。我在这个DataSet上使用数据绑定创建了一个表单,你可以说它非常复杂。

下一个场景是:表单的主要目的是插入新记录。要插入它,必须设置各种父子关系。这一切都适用于数据绑定,但问题是下一个:当用户想要为这些父子关系之一输入一个新的“孩子”时,新表单打开,他输入它,yada yada yada, - 它作品。麻烦的是 - 如何将新数据恢复到原始形式,以显示在父子组合框中?

我知道的一种方法是刷新整个表格;但我正在寻找一种解决方案,只刷新包含该数据的DataTable。我尝试使用来自DB的新数据获取新的DataTable,并将其与DataSet中的DataTable合并,但它不起作用:“子行具有多个父项”异常被抛出:

// basically just a Select * using dataadapter,
// nothing programmatically added 
DataTable table = tableModule.GetPlainTable(); 
existingDataSet.Tables["tableName"].Merge(table);

我正在尝试做的同样的例子是订购表格,上面有客户组合框。在组合框的右侧,有一个“添加”按钮,可以打开一个新的“添加客户”表单。仅提及(可能是相关的),在DB内部,“Customers”表与“Cities”表相关,并且该数据也在Orders表单的数据绑定中链接......

编辑:我能想到的一个解决方案是在整个新的DataTable中“手动”循环,并查找DataSet中原始DataTable中没有的所有行,但我不确定这是否可行... < / p>

任何帮助/建议/解释/推动正确的方向将非常感谢:)

1 个答案:

答案 0 :(得分:0)

嗯,我在第二种形式插入时解决了手动行复制的问题...我创建了一个带有对象集合的事件(行项目数组),并在第一个表单中注册了该事件的处理程序,其中我通过以下方式手动添加新行:

data.Tables["tableName"].Rows.Add(e.RowItems);

之后我在该行上调用AcceptChanges()使其状态为Unchanged,而不是添加...

这种解决方案虽然快速而肮脏,但却有效。问题是,我认为有一个更好的,更“数据化”的哲学导向一个......:=)