Как приостановить уведомление DataTable или привязку данных, чтобы предотвратить обновление пользовательского интерфейса - PullRequest
3 голосов
/ 13 октября 2011

Я получил DataGrid (Infragistic UltraGrid), который привязан к DataTable.

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

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

  1. ultraGrid.BeginUpdate() - это метод, разработанный специально для UltraGrid, который не дает сетке рисовать. Хорошо работает с темой Aero, но если вы используете «классическую» тему в окне, сетка не отрисовывается сама, поскольку рисование приостановлено.

  2. BindingSource.SuspendBinding() - Это только приостановит изменение пользовательского интерфейса к базовому источнику, но не наоборот

  3. BindingSource.RaiseListChangedEvent = false - попытался установить значение false, но сетка все еще обновляется.

  4. Grid.BindingContext = new BindingContext() - попытаться выяснить, могу ли я удалить привязку, лежащую в основе, чтобы предотвратить обновление в сетке. Это вообще не работает и не знаю, как его использовать

Другие идеи:

  1. ultraGrid.SetDataBinding(null, null) - Он в основном удаляет всю информацию в сетке, что не то, что я хочу.

  2. Создать снимок и накрыть сетку - это действительно взлом, который предлагали другие. Я пытаюсь избежать такого взлома.

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

Спасибо

1 Ответ

0 голосов
/ 29 ноября 2011

Единственный способ, которым я знаю, чтобы полностью подавить любое действие по изменению источника данных, - использовать реализацию UltraGrid ISupportInitialize интерфейс:

((ISupportInitialize)Grid).BeginInit();

///
/// your code here
///

((ISupportInitialize)Grid).EndInit();
...