2011-01-26 5 views
1

У меня есть DataTable (отображается через DataGridView) и вы хотите повторно использовать его для ручного заполнения разных данных. Таким образом, рабочий процесс:Как повторно использовать DataTable для разных источников данных в C#?

Каждый раз, когда мне нужно пополнить DataTable, я:

  1. Отцепите DataTable из DataGridView.
  2. Очистить содержимое DataTable.
  3. Вручную добавьте DataColumns и DataRows в DataTable.
  4. Снова перетащите DataTable с помощью DataGridView.

Для достижения шага 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. Каков правильный способ очистки старого контента DataTable, чтобы он никогда не ссылался на старый контент, когда я заполняю новые материалы?

Спасибо.

+2

Почему бы просто не создать новый DataTable? Что вы получаете, добавляя эту сложность? –

ответ

5

Данные привязки данных DataGridView привязаны к таблице (через DataView); вы не можете вытащить стол из-под него и ожидать, что он продолжит работу.
Когда вы сортируете по столбцу, сетка просит DataView изменить порядок сортировки, что не получается, потому что столбец не существует anymoe.

Вам следует создать новый DataTable.

+0

Большое спасибо. – Steve

Смежные вопросы