2014-11-04 8 views
1

Мой DataGridView связан с BindingSource, который имеет DataSet как DataSource. Соответствующий TableAdapter в DataSet имеет, среди прочих, метод Fill, который поставляет данные из базы данных Access. Я наполняю свою DataGridView с данными, как показано ниже:DataGridView показывает некоторые пустые ячейки в первой строке после обновления

myTableAdapter.Fill(myDataSet.MyDataTable); 

Все это прекрасно работает как и ожидалось. Проблема возникает, когда я меняю свои данные с помощью UpdateQuery (который также отлично работает), а затем снова нажмите на любую из строк в моем DataGridView - как только я нажму, последние две ячейки (всегда) первой строки показанный как пустой. Независимо от того, какую строку я нажимаю, это всегда ячейки в первой строке и только после выполнения UpdateQuery.

Когда я проверяю базу данных Access напрямую, все в порядке (то есть обновление выполнено успешно). Когда я перезапускаю приложение, все появляется без каких-либо проблем (до следующего раза я звоню UpdateQuery и нажимаю на свой DataGridView).

Я также попытался назвать EndEdit()``and Refresh on the DataGridView and calling AcceptChanges() on both the DataSet and the respective DataTable` - ничего не изменилось.

Обновление

Описанное поведение имеет место только после выполнения UpdateQuery, Insert с и Delete сек работы без проблем (данные не обновляются корректно, никаких проблем отображения).

Update 2

Проблема также существует, когда я использую различные обработчики событий - первоначально я использовал CellClick, я также попытался с помощью CellContentClick и CellMouseClick. Это даже происходит, когда я вообще не использую мышь, но использую клавиатуру для навигации в пределах DataGridView.

Кажется, что «просто» отображение моих данных не работает, что мне не хватает? Такая же ошибка возникает во всех моих DataGridView s, которые я использую в своей форме, независимо от того, насколько простыми или сложными являются данные, которые я запрашиваю/обновляю.

+0

Попробуйте установить BindigSource.AllowNew = false – daniele3004

+0

@ daniele3004 - попробовал, что не работал (как и ожидалось - почему это должно измениться?). – Gorgsenegger

+0

Я использую BindingSource, загруженный списком или массивом. В моем случае это работает. – daniele3004

ответ

0

Таким образом, это оказалось некорректным поведением метода TextBox.Clear(). Добавить дополнительную информацию ниже, я не счел необходимым при проводке моего вопроса:

Под моего DataGridView У меня есть несколько DataBound TextBox управления - привязки данные были определена как

txtSomeId.DataBindings.Add("Text", myDataGridView.DataSource, "ID"); 

После вызова метода UpdateQuery I перезагрузки данные (мелкие), а затем очистили содержание этих элементов управления TextBox:

txtSomeId.Clear(); 

Согласно MSDN, этот метод

«Очищает весь контент из текстового поля».

Это вся информация, которую предоставляет страница. Удаляя эти строки кода, все работает так, как ожидалось, и проблем больше нет.

То, что вызов метода Clear также означает, что привязка данных частично (?) Удалена, я не ожидал.

Я написал «частично», поскольку привязка по-прежнему работает для других строк в DataGridView и элементах управления TextBox, только не для первого (и здесь только для некоторых ячеек). По моему мнению, это очень странное поведение, возможно, кто-то еще может пролить свет на это.

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