VB.net 2010 - IndexOutOfRange из таблицы данных при обновлении набора данных - PullRequest
1 голос
/ 06 октября 2010

У меня есть сетевое представление в форме, связанной с таблицей в наборе данных из другого класса.

Я использую адаптер данных для. Заполните таблицу в этом наборе данных, и сетка отображает данные в порядке.

Работает нормально.

В моей форме есть текстовое поле, которое может ввести пользователь, которое передаст параметр хранимой процедуре, используемой для заполнения этой таблицы. Таким образом, при запуске текстовое поле будет иметь «%». а затем пользователь может ввести «F%» и получить все, что начинается с «F»

Поэтому, когда это текстовое поле изменяется, я запускаю асинхронное обновление (.BeginInvoke), чтобы выполнить свое обновление. Таблица заполняется уменьшенным количеством записей (я проверяю ds.table (0) .rows.count, и это правильно)

Но затем datagridview начинает генерировать события datagridview.dataerror. "System.IndexOutofRangeException: у Index # нет значения"

Похоже, что набор данных заполняется правильно и не возникает никаких проблем, но сетке данных не нравится это обновление. Ошибка индекса вне диапазона настолько распространена, что я не могу найти то, что мне нужно, через поиск.

Заранее спасибо! :)

Ответы [ 3 ]

1 голос
/ 07 октября 2010

Я не знаю решения вашей конкретной проблемы, но кажется, что тратить усилия на попадание в базу данных при каждом нажатии клавиши, когда все данные загружаются заранее.

Вместо того, чтобы каждый раз запрашивать базу данных, почему бы не установить RowFilter для DataView и пропустить вызов базы данных?

0 голосов
/ 30 ноября 2010

У меня была похожая проблема, и это было потому, что я хотел сделать это:
dg1.CurrentCell = dg1.Rows (dg1.RowCount - 1) .Cells (1)
после изменения dg1.DataSource.
Представляется опасным использование RowCount, когда AllowUserToAddRows = True.
Я переключил это на Ложь, и это сработало.

0 голосов
/ 06 октября 2010

Ну, найдите ошибку.

  • Выньте BeginInvoke и сделайте это синхронно.Посмотри, исправит ли это.Если нет, оставьте это, пока не убедитесь, что у вас нет других проблем.

  • @ roadie имеет хороший комментарий по сбросу SelectedRow

  • Существуют похожие способы принудительного применения обновления.Как

..

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