![](/img/trans.png)
[英]How to make a DataTable from DataGridView without any Datasource?
[英]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.