C# 应用对复制的 DataTable 所做的更改

C# Apply changes made to copied DataTable

大家好!

我在尝试使用多个 DataTable 在多个 GridControl (DataGridView) 中显示和编辑数据时偶然发现了一个问题。

我有一个主数据表,用于存储有关用户的数据(只是一个示例)和一组另一个数据表,用于存储不同的数据(也与用户有关)。

我现在显示它们的方式如下:所有附加数据表都有一个“UserId”列,当在主 GridControl(用户)中单击该行时,使用 [=13= 复制其他 GridControl 的数据]

DataTable.Select(„UserId = …”) 

方法,然后仅选定用户的数据显示在 GridControl 中。具有完整数据的 DataTable 存储在不同的变量中,每次单击 MainGrid 行时,完整数据用于为选定用户生成 DataTable。

显示数据工作正常,但在编辑那些额外的 GridControl 时,出现了一些问题。为了编辑它们,我使用 SqlDataAdapters 为每个额外的 tables 生成完整的数据表,当点击保存按钮时,它们只是更新数据库。

问题是我用

DataTable.Select(“UserId = …”)

如果我编辑新的 table,完整的 table 将不会受到影响。

另一方面,我不能只做

DataTable _NewTable = _OldTable 

因为如果我尝试删除包含我不想显示的其他用户数据的行,它们将从完整的 DataTable 中完全删除。

由于我使用的是 DevExpress 控件,我可以将 GridControl 的数据源设置为完整 table 并在 GridControl 上应用过滤器,但这会使最终用户更难过滤数据。

您是否知道如何解决该问题,以便我可以编辑那些 "small" 数据表,然后以某种方式更新完整数据表中那些更改的行并能够使用 SqlDataAdapter?

感谢您的帮助,如果让您感到困惑,我们深表歉意!

我认为您不能复制子表的值并通过引用将其传递到父网格。了解差异 here。那么你会改变子网格,它也会改变父网格。

P.S。请post你所有的代码以获得更详细的答案

@Vlad 已解决我的问题,使用 DataView 作为带有行过滤器的附加网格控件的数据源。