2011-03-08 58 views
0

当我从代码创建新数据集或通过数据库中的数据适配器检索数据时,将行内容更改为更改的rowstate。这是默认行为,一切正常:数据绑定中断DataRow.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蔓延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的修饰:

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

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

+0

我认为行状态没有正确的序列化。你是否在接收到客户端的行之后首先尝试AcceptChanges()? – 2011-03-08 10:55:25

+0

@ ralf.w:是的,但没有帮助。 AcceptChanges()只是将子对象AFAIK上的RowState重置为Unchanged。 – grizzly 2011-03-08 11:25:20

回答

0

那么看来这个问题是在公司Farpoint传播控制。版本5.0打破了功能,葡萄城的家伙得到了版本5.0.3518中的错误,现在可以正常工作。

1

尝试EndEdit中()方法调用DataAdapter.Update()之前

+0

我试过调用DataRow.EndUpdate(),但它也不起作用。顺便说一句,DataTable不包含EndUpdate()方法。 – grizzly 2011-03-08 12:22:29

+0

否,否EndUpdate(),使用EndEdit()。 'ds.Tables [“myTable”]。行[0] .EndEdit();' – Ray 2011-03-08 12:38:23

+0

我的不好,我的意思是EndEdit(),这是一个错字。 – grizzly 2011-03-08 12:41:30

0

我遇到了一种形式的类似情况,我意识到这个问题是在绑定到标签ToolTip属性。首先我意识到,当我将的值为空更改为某些字符串时,问题消失,但在项目发生一些其他更改后,问题再次出现。当我删除绑定到工具提示属性时,问题再次消失。尽管如此,我仍然不知道。