C# datagrid在datatable.copy之后与数据源失去连接

C# datagrid在datatable.copy之后与数据源失去连接,c#,datagridview,datatable,C#,Datagridview,Datatable,我有两个数据表 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");

我有两个数据表

 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在复制后丢失了源代码,并且有没有一种方法可以从数据表复制而不重新分配datasource?我想这是因为DataTable.copy确实返回了DataTable的一个新实例

因此,当您这样做时:“dt=dt1.Copy()”实际上是用一个新引用替换dt

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


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

dt=dt1.Copy()之后是否清除
dt1
?不,我不知道,谢谢你的回复谢谢,我现在知道了,但是有没有一种方法可以在不替换引用的情况下从另一个表复制数据