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

时间:2011-01-26 01:57:47

标签: c# datatable

我有一个DataTable(通过DataGridView显示),并希望重复使用它来手动填写不同的数据。所以工作流程是:

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

  1. 从DataGridView中取消DataTable。
  2. 清除DataTable内容。
  3. 手动将DataColumns和DataRows添加到DataTable。
  4. 使用DataGridView再次挂起DataTable。
  5. 要实现第0步,我只需执行:DataGridView.DataSource = null。

    要实现第1步,我调用DataTable.Clear(),DataTable.Rows.Clear()和DataTable.Columns.Clear()。

    要实现第3步,我调用DataGridView.DataSource = DataTable。

    第2步以正常方式完成,我跳过代码。

    每当使用新内容更新DataGridView时,如果我单击DataGridView列进行排序,下次更新DataTable时,当我尝试添加新行时,我将在步骤2中获得空引用异常。但是,如果我从不单击DataGridView列进行排序,那么一切正常。

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

    感谢。

1 个答案:

答案 0 :(得分:5)

DataGridView的数据绑定绑定到表(通过DataView);你不能把它从桌子底下拉出来,并期望它继续工作。
当您按列排序时,网格会要求DataView更改其排序顺序,但由于该列不存在anymoe而失败。

您应该创建一个新的DataTable。