当我从代码创建新数据集或通过数据库中的数据适配器检索它时,将行内容结果更改为更改的行状态。这是默认行为,一切正常:
数据集 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("纽约", "美国"); // 为第 0 行添加状态 table.Rows.Add("伦敦", "UK"); // 为第 1 行添加状态 table.AcceptChanges(); // 两行的状态都是不变的 table.Rows[0][1] = "西雅图"; // 状态为第 0 行已修改
当我从数据库中检索数据集,然后通过 wcf 发送它(是的,我知道这是一个不好的做法,但那是另一回事,我使用的是标准行为)并在代理上接收它,它的数据行仍然是“状态-知道的”。数据行仍然对其值的修改作出反应。
编辑:在我进一步调试问题后,我发现数据集已正确反序列化并反映了 wcf 客户端的更改(行状态对应于单元格值的修改)。在每个 DataTable 绑定(WPF 托管的 Windows 窗体绑定)到 FarPoint 电子表格对象后,反映能力的更改似乎丢失了:
sheet = new SheetView("Sample"); DataTable table = 获得的DataSet.Tables[0]; // RowState 是正确的 sheet.DataSource = 表;// 从现在开始,RowState 是“损坏的”
因此,从将数据集的表绑定到 FarPoint 电子表格对象的角度来看,这些行是“无状态的”。我可能会更改它们的内容或显式调用 SetModified,但两个操作都不会将其行状态更改为已修改:
获得DataSet.Tables[0].Rows[0][1] = "西雅图"; // 状态不变 获得DataSet.Tabels[0].SetModified(); // 状态不变
现在有没有可能说服数据集再次变得明智并开始反映其变化,或者我需要考虑一种不同的方法?有没有人知道可能出了什么问题(绑定自身或 FarPoint 组件,错误的模式)?