来自DatagridView数据源的临时DataTable

时间:2016-06-03 14:20:56

标签: c# datagridview datatable

我有一个数据表,它是从datagridview数据源创建的,并希望对该数据表进行修改,如:

DataTable dt = (DataTable)dataGridView1.DataSource;
dt.Remove("xyz");

这会从dt中删除xyz列,但是也会将其从datagridview的原始数据源中删除。但我想将此dt仅用于临时目的,并且不希望将列从原始列中删除。

为什么它们的行为类似于绑定变量?我该如何处理?

1 个答案:

答案 0 :(得分:1)

最简单的方法是通过方法DataTable.Copy在新的DataTable中复制原始数据表的结构和数据

DataTable dt = (dataGridView1.DataSource as DataTable).Copy();
dt.Remove("xyz");

当然,如果您的数据表包含大量记录,这可能会有问题,因为您在内存中将有两组相同的数据,并且复制过程不是立即的。但是,如果不知道代码的目的是什么,我就无法提供替代方案。

由于这种行为的原因,简而言之,DataTable是一个引用变量,这意味着它包含一个值,该值用于寻址存储DataTable真实信息的内存区域。当您返回该引用时,您正在访问DataSource属性使用的相同内存区域(也是引用),因此通过一个引用所做的更改在第二个引用中可见。

可以在这里找到更深入的讨论

Value Type vs Reference Type

References and Values