【问题标题】:datagrid lost connection with DataSource after datatable.copy在 datatable.copy 之后 datagrid 失去了与 DataSource 的连接
【发布时间】:2018-04-24 05:02:37
【问题描述】:

我有两个数据表

 DataTable dt = new DataTable();      
 DataTable dt1 = new DataTable();

然后我将数据添加到“dt”数据表并将其设置为 datagridview 的源

        dt.Columns.Add("id", typeof(int));
        dt.Columns.Add("name", typeof(string));

        dt.Rows.Add(1, "One");
        dt.Rows.Add(2, "Two");
        dt.Rows.Add(3, "Three");
        dataGridView1.DataSource =dt;

然后我将 dt 复制到 dt1 并清除 dt 中的数据

        dt1 = dt.Copy();           
        dt.Clear();

现在将 dt1 复制回 dt 后,datagrid 丢失了源:

dt = dt1.Copy();

即使 dt 有数据,datagrid 现在什么也没有显示,但是当再次将 datagrid 重新分配给 dt 时,数据会显示出来

 dataGridView1.DataSource =dt;

我的问题是为什么 datagrid 在复制后会丢失源,有没有办法从数据表中复制而不重新分配数据源

【问题讨论】:

  • 你在dt = dt1.Copy();之后清除dt1吗?
  • 不,我不知道,谢谢回复

标签: c# datagridview datatable


【解决方案1】:

我想这是因为 DataTable.Copy 确实返回了 DataTable 的 new 实例。

所以当你这样做时:“dt = dt1.Copy()”你实际上是在用一个新的引用替换 dt。

但是,您的数据网格仍然使用“dt”的旧引用(它们现在是完全不同的对象,其中“旧”对象刚刚被您清除......因此没有数据)。

更新(在“有办法”评论之后):是的。 MSDN 是你的朋友。也不知道那是我的头顶。 DataTable.Merge 做你想做的事(可能 - 因为我们不知道你想要什么,呵呵)

【讨论】:

  • 谢谢,我现在明白了,但是有没有办法从另一个表复制数据而不替换参考
猜你喜欢
  • 1970-01-01
  • 2015-09-20
  • 2018-08-06
  • 2016-01-15
  • 1970-01-01
  • 2019-03-03
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多