Как я могу асинхронно обновить таблицу данных и сетку?

Я использую компонент DevExpress XtraGrid и DataTable в качестве источника данных.

Я хотел бы обновлять данные (асинхронно) каждые несколько секунд, но я не хочу прокручивать/сворачивать/изменять сетку.

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


person SofaKng    schedule 08.11.2011    source источник


Ответы (1)


Я думаю, что вы можете использовать следующий подход:

  1. Используйте BindingSource в качестве источника данных для GridControl и отключите параметр BindingSource.RaiseListChangedEvents. Это позволит вам запретить вашему источнику данных отправлять уведомления в GridControl. В результате GridControl не будет автоматически обновляться при каждом изменении.

  2. При обновлении источника данных сохраните обновленные индексы строк.

  3. Наконец, введите таймер с интервалом, равным, например, пяти секундам, и вызовите метод RefreshRow для обновления только необходимых строк. Кроме того, вы можете обновить все строки с помощью метода RefreshDataSource.

В результате вы будете обновлять только необходимые строки раз в пять секунд, а состояния строк будут сохраняться.

person Dmitrii Babich    schedule 09.11.2011
comment
Это хорошо работает, если у вас нет большого количества строк, и в этот момент любое обновление блокирует пользовательский интерфейс. - person jnm2; 15.05.2014