Data-Binding打破DataRow.RowState功能

时间:2011-03-08 10:38:41

标签: c# .net data-binding dataset farpoint

当我从代码创建新数据集或从数据库通过数据适配器检索它时,将行内容更改为更改的rowstate。这是默认行为,一切正常:

DataSet ds = new DataSet();
DataTable table = new DataTable("Cities");
table.Columns.Add("CityName", typeof(string));
table.Columns.Add("CountryName", typeof(string));
ds.Tables.Add(table);

table.Rows.Add("New York", "USA"); // state is Added for row 0
table.Rows.Add("London", "UK"); // state is Added for row 1

table.AcceptChanges(); // state is Unchanged for both rows

table.Rows[0][1] = "Seattle"; // state is Modified for row 0

当我从数据库中检索数据集时,然后通过wcf发送它(是的,我知道这是一个不好的做法,但这是一个不同的故事,我正在使用标准行为)并在代理上接收它,它的数据行仍然是“国家意识”。数据行仍然会对其值修改做出反应。

编辑: 在我进一步调试问题后,我发现数据集被正确反序列化并反映了wcf客户端的更改(rowstate对应于单元格值的修改)。每个DataTable绑定(WPF托管Windows窗体绑定)到FarPoint Spread Sheet对象后,反映功能的更改似乎丢失了:

sheet = new SheetView("Sample");
DataTable table = obtainedDataSet.Tables[0]; // RowState is correct
sheet.DataSource = table; // from now on, RowState is "corrupt"

因此,从将数据集的表绑定到FarPoint Spread Sheet对象的角度来看,行是“状态无知的”。我可以更改其内容或显式调用SetModified,但这两个操作都不会将其rowstate更改为modified:

obtainedDataSet.Tables[0].Rows[0][1] = "Seattle"; // state is Unchanged
obtainedDataSet.Tabels[0].SetModified(); // state is Unchanged

现在是否有可能说服数据集再次明智并开始反映其变化,或者我需要考虑采用不同的方法?有没有人知道什么可能是错的(绑定本身或FarPoint组件,错误的模式)?

3 个答案:

答案 0 :(得分:1)

在调用DataAdapter.Update()之前尝试在DataTable或DataRow对象中使用EndEdit()方法

答案 1 :(得分:0)

好吧,问题出现在FarPoint Spread控件中。版本5.0破坏了功能,GrapeCity的人员在版本5.0.3518中修复了错误,现在工作正常。

答案 2 :(得分:0)

我遇到了一种形式的类似情况,我意识到问题在于对标签ToolTip属性进行绑定。首先我意识到,当我将 null 的值从 null 更改为某个字符串时,问题就会消失,但在对项目进行其他一些更改后,问题再次出现。当我删除与ToolTip属性的绑定时,问题再次消失。我仍然不知道是否永远。