Как повторно использовать DataTable для другого источника данных в C #? - PullRequest
1 голос
/ 26 января 2011

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

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

Спасибо.

1 Ответ

5 голосов
/ 26 января 2011

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

Вы должны создать новую таблицу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...