Виртуальный режим элемента управления DataGridView в Windows Forms
Обновлен: Ноябрь 2007
Виртуальный режим позволяет управлять взаимодействием между элементом управления DataGridView и пользовательским кэшем данных. Чтобы реализовать виртуальный режим, необходимо присвоить свойству VirtualMode значение true и обеспечить обработку одного или нескольких событий, описываемых в этом разделе. Обычно используется, как минимум, обработчик событий CellValueNeeded, которое позволяет элементу управления производить поиск значений в кэше данных.
Связанный и виртуальный режимы
Виртуальный режим необходим, только когда требуется расширить или заменить связанный режим. В связанном режиме задается свойство DataSource, и элемент управления автоматически загружает данные из указанного источника и передает в него внесенные пользователем изменения. При этом можно указывать, какие из связанных столбцов должны отображаться, а источник данных сам отвечает за выполнение таких операций, как сортировка.
Расширение связанного режима
Связанный режим можно расширить путем одновременного отображения связанных и несвязанных столбцов. Иногда это называют "связанным режимом". Он может использоваться, например, для отображения вычисленных значений или элементов управления пользовательского интерфейса.
Поскольку несвязанные столбцы не относятся к источнику данных, они игнорируются при выполнении источником данных операций сортировки. Поэтому при использовании сортировки в смешанном режиме необходимо обеспечить управление несвязанными данными в локальном кэше и реализовать виртуальный режим, чтобы элемент управления DataGridView мог взаимодействовать с ним.
Для получения дополнительных сведений об использовании виртуального режима для сохранения значений в несвязанных столбцах см. примеры в справочных разделах, посвященных свойству DataGridViewCheckBoxColumn.ThreeState и классу System.Windows.Forms.DataGridViewComboBoxColumn.
Замещение связанного режима
Если связанный режим не удовлетворяет требованиям производительности, можно обеспечить управление данными в пользовательском кэше посредством обработчиков событий виртуального режима. Например, виртуальный режим может использоваться для реализации механизма JIT-загрузки, с помощью которого из сетевой базы данных извлекается только такой объем данных, который не приведет к снижению производительности. Этот сценарий особенно эффективен при работе с большими объемами данных через медленное сетевое подключение или при ограниченном объеме оперативной памяти или дискового пространства на клиентских компьютерах.
Дополнительные сведения об использовании виртуального режима в JIT-сценариях см. в разделе Реализация виртуального режима с JIT-загрузкой данных для элемента управления DataGridView в Windows Forms.
События виртуального режима
Если данные доступны только для чтения, может понадобиться обработка только события CellValueNeeded. Дополнительные события виртуального режима позволяют реализовать специальные возможности, такие как редактирование данных пользователем, добавление и удаление строк, а также транзакции на уровне строк.
Некоторые стандартные события элемента управления DataGridView (например, события, наступающие при добавлении или удалении строк пользователем, редактировании, преобразовании, проверке или форматировании значений ячеек) также могут использоваться в виртуальном режиме. Кроме того, существует возможность обработки событий, которые позволяют поддерживать значения, обычно не сохраняемые в связанном источнике данных. К таким значениям относятся: текст всплывающих подсказок для ячеек, текст ошибки для ячейки или строки, данные контекстного меню для ячейки или строки, а также данные о высоте строке.
Дополнительные сведения о реализации виртуального режима для управления данными, доступными для чтения и записи, с областью фиксации на уровне строк см. в разделе Пример. Реализация виртуального режима для элемента управления DataGridView в Windows Forms.
Пример реализации виртуального режима с областью фиксации на уровне ячеек см. в справочном разделе, посвященном свойству VirtualMode.
Следующие события наступают, только если свойство VirtualMode имеет значение true.
Событие |
Описание |
---|---|
Используется элементом управления для извлечения значения ячейки из кэша данных для отображения. Это событие происходит только для ячеек в несвязанных столбцах. |
|
Используется элементом управления для сохранения введенного пользователем значения ячейки в кэш данных. Это событие происходит только для ячеек в несвязанных столбцах. При изменении значения, находящегося в кэше, вне обработчика событий CellValuePushed следует вызвать метод UpdateCellValue, чтобы обеспечить отображение текущего значения в элементе управления и правильное применение текущего режима автоматического изменения размеров. |
|
Используется элементом управления для указания на необходимость создания новой строки в кэше данных. |
|
Используется элементом управления для определения наличия в строке несохраненных изменений. |
|
Используется элементом управления для указания на то, что строке должны быть возвращены значения из кэша. |
Следующие события могут оказаться полезными в виртуальном режиме, однако могут использоваться вне зависимости от значения свойства VirtualMode.
События |
Описание |
---|---|
Используется элементом управления для указания на факт добавления или удаления строк, что позволяет соответствующим образом обновить кэш данных. |
|
Используется элементом управления для форматирования отображаемых значений ячеек, а также анализа и проверки вводимых пользователем данных. |
|
Используется элементом управления для извлечения текста всплывающей подсказки для ячейки, если задано свойство DataSource или свойство VirtualMode имеет значение true. Всплывающие подсказки для ячеек отображаются, только если свойство ShowCellToolTips имеет значение true. |
|
Используется элементом управления для извлечения текста ошибки для ячейки или строки, если задано свойство DataSource или свойство VirtualMode имеет значение true. При изменении текста ошибки для ячейки или строки следует вызвать метод UpdateCellErrorText или UpdateRowErrorText, чтобы обеспечить отображение в элементе управления текущего значения. Глифы ошибок для ячеек и строк отображаются, только если свойства ShowCellErrors и ShowRowErrors имеют значение true. |
|
Используется элементом управления для извлечения ячейки или строки ContextMenuStrip, если задано свойство DataSource или свойство VirtualMode имеет значение true. |
|
Используется элементом управления для извлечения или сохранения сведений о высоте строки в кэш данных. При изменении сведений о высоте строки, находящихся в кэше, вне обработчика событий RowHeightInfoPushed следует вызвать метод UpdateRowHeightInfo, чтобы обеспечить использование текущего значения при отображении элемента управления. |
Рекомендации по использованию виртуального режима
При реализации виртуального режима в целях эффективной работы с большими объемами данных следует также обеспечить эффективность использования самого элемента управления DataGridView. Дополнительные сведения об эффективном использовании стилей ячеек, автоматического изменения размеров, выделения и совместного использования строк см. в разделе Масштабирование элемента управления DataGridView в Windows Forms.
См. также
Задачи
Пример. Реализация виртуального режима для элемента управления DataGridView в Windows Forms
Основные понятия
Масштабирование элемента управления DataGridView в Windows Forms
Ссылки
Другие ресурсы
Оптимизация производительности элемента управления DataGridView в Windows Forms