繁体   English   中英

来自DatagridView数据源的临时DataTable

[英]Temporary DataTable from DatagridView datasource

我有一个从datagridview数据源创建的数据表,想要对该数据表进行修改,例如:

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

这样可以很好地从dt中删除xyz列,但也可以从datagridview的原始数据源中删除它。 但是我只想将此dt用于临时目的,而不希望从原始列中删除该列。

为什么它们的行为像绑定变量一样,我该如何处理?

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

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

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

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

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

值类型与参考类型

参考和价值观

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM