DataGrid问题。将DataSet.Merge与“编辑模板”一起使用

时间:2011-04-06 19:46:39

标签: c# .net winforms sorting datagridview

我正在尝试使用WinForm应用程序调试问题。

应用程序使用绑定到DataSet的DataGridView。

用户可以选择一行并单击“编辑”,然后会出现一个编辑表单,以便用户可以编辑该行并保存其更改。

如果DataGridView按一列或多列排序,并且用户多次编辑一行并更改DataGrid中的行位置(通过更改其中一个排序列TWICE),则DataGridView不同步,我得到异常错误。

以下是代码的编写方式:

当用户单击一行并点击编辑(用户可能只选择一行)时,该行将传递给EditFom。编辑表单创建一个空数据集并加载该行。用户完成后,调用表单使用DataSet.Merge将这些更改合并回其DataSet。

以下几个场景告诉我它与“合并”和排序有关:

(注意,我从不改变实际的“排序”,我正在谈论改变其中一行中按排序列之一的值。)

  1. 如果用户直接在网格中编辑一行并更改其中一个用于排序的列的值,则再次更改它等等。该行在网格周围移动,就像它应该和当用户点击保存,一切都保存得很好。

  2. 如果用户编辑了一行(直接在网格中或通过“模板”)并且没有更改任何“排序”列,只需进行编辑(通过将行的“状态”设置为修改,正确...),然后用户使用模板编辑行(通过单独的DataSet并在完成后合并数据),并更改正在排序的列之一(完成后,网格应该使用该行应该“移动”),该行没有得到REPAINTED,它保持在模板编辑之前的网格中的相同位置。 (虽然,数据保存得很好,您可以刷新网格并对其进行正确排序。)显然,DataGrid在这种情况下没有得到RowChanged的通知(或者它是,但它没有做任何关于它的事情)。

  3. 如果用户直接在网格中编辑行,更改排序列(行移动),然后使用模板编辑行并再次更改该列,我们得到与上面2相同的结果。数据保存得很好,但是当用户离开编辑模板时,网格不会求助。

  4. (这是导致异常错误的那个。)

    1. 如果用户使用模板编辑行并更改排序列并离开模板,则数据网格会进行调整并且行会正常移动。然后,如果用户使用模板编辑编辑SAME行并更改排序列AGAIN。当用户离开编辑模板时,数据网格不会占用,当用户保存数据并刷新网格时,我们会收到错误:
    2. System.InvalidOperationException:DataTable内部索引已损坏:'5'。

      有时,我们会收到错误,抱怨主键丢失。

      关于如何“调试”这个的任何建议?我觉得它与编辑模板使用的“internediate”数据集和“Merge”有关。就像DataGrid数据源与DataGrid Rows不同步一样。

1 个答案:

答案 0 :(得分:0)

我应该在发布之前做一些谷歌。这似乎是一个常见错误,我在MS网站上发现了一篇关于此问题的巨大帖子。不幸的是,我已经尝试了他们的大部分建议,但很可能我会在那里找到答案。我只是想记下这个,如果有人有兴趣的话:

http://social.msdn.microsoft.com/Forums/en/adodotnetdataproviders/thread/18544cd3-1083-45fe-b9e7-bb34482b68dd