C# 如何在C中为不同的数据源重用DataTable?

C# 如何在C中为不同的数据源重用DataTable?,c#,datatable,C#,Datatable,我通过DataGridView显示了一个DataTable,并希望重用它来手动填充不同的数据。因此,工作流程是: 每次我需要重新填充DataTable时,我都会: 从DataGridView中取消钩取DataTable。 清除数据表内容。 手动将DataColumns和DataRows添加到DataTable。 用DataGridView再次钩住DataTable。 为了实现步骤0,我只需执行以下操作:DataGridView.DataSource=null 为了实现步骤1,我调用DataTab

我通过DataGridView显示了一个DataTable,并希望重用它来手动填充不同的数据。因此,工作流程是:

每次我需要重新填充DataTable时,我都会:

从DataGridView中取消钩取DataTable。 清除数据表内容。 手动将DataColumns和DataRows添加到DataTable。 用DataGridView再次钩住DataTable。 为了实现步骤0,我只需执行以下操作:DataGridView.DataSource=null

为了实现步骤1,我调用DataTable.Clear、DataTable.Rows.Clear和DataTable.Columns.Clear

为了实现步骤3,我调用DataGridView.DataSource=DataTable

步骤2是以正常方式完成的,我跳过了代码

每当使用新内容更新DataGridView时,如果我单击DataGridView列进行排序,下次更新DataTable时,当我尝试添加新行时,在步骤2中会出现空引用异常。但若我从未单击DataGridView列进行排序,那个么一切都可以正常工作

我想这和分类有关。但是我不知道是什么导致了空引用异常。DataTable是否可能尝试在旧内容中搜索某些键,但找不到?当然,由于步骤1,它找不到旧内容。什么是清除旧数据表内容的正确方法,以便在我填写新内容时它从不引用旧内容


谢谢。

DataGridView的数据绑定通过DataView绑定到表;你不能把桌子从下面拉出来,指望它继续工作。 按列排序时,网格会要求DataView更改其排序顺序,但由于列不存在,因此排序失败


您应该创建一个新的DataTable。

DataGridView的数据绑定通过DataView绑定到表;你不能把桌子从下面拉出来,指望它继续工作。 按列排序时,网格会要求DataView更改其排序顺序,但由于列不存在,因此排序失败


您应该创建一个新的数据表。

为什么不创建一个新的数据表呢?增加这种复杂性有什么好处?为什么不创建一个新的数据表呢?增加这种复杂性会带来什么好处?