当我从代码创建新数据集或通过数据库中的数据适配器检索数据时,将行内容更改为更改的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对象
我认为行状态没有正确的序列化。你是否在接收到客户端的行之后首先尝试AcceptChanges()? – 2011-03-08 10:55:25
@ ralf.w:是的,但没有帮助。 AcceptChanges()只是将子对象AFAIK上的RowState重置为Unchanged。 – grizzly 2011-03-08 11:25:20