Поделиться через


Виртуальный режим элемента управления 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.

Событие

Описание

CellValueNeeded

Используется элементом управления для извлечения значения ячейки из кэша данных для отображения. Это событие происходит только для ячеек в несвязанных столбцах.

CellValuePushed

Используется элементом управления для сохранения введенного пользователем значения ячейки в кэш данных. Это событие происходит только для ячеек в несвязанных столбцах.

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

NewRowNeeded

Используется элементом управления для указания на необходимость создания новой строки в кэше данных.

RowDirtyStateNeeded

Используется элементом управления для определения наличия в строке несохраненных изменений.

CancelRowEdit

Используется элементом управления для указания на то, что строке должны быть возвращены значения из кэша.

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

События

Описание

UserDeletingRow

UserDeletedRow

RowsRemoved

RowsAdded

Используется элементом управления для указания на факт добавления или удаления строк, что позволяет соответствующим образом обновить кэш данных.

CellFormatting

CellParsing

CellValidating

CellValidated

RowValidating

RowValidated

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

CellToolTipTextNeeded

Используется элементом управления для извлечения текста всплывающей подсказки для ячейки, если задано свойство DataSource или свойство VirtualMode имеет значение true.

Всплывающие подсказки для ячеек отображаются, только если свойство ShowCellToolTips имеет значение true.

CellErrorTextNeeded

RowErrorTextNeeded

Используется элементом управления для извлечения текста ошибки для ячейки или строки, если задано свойство DataSource или свойство VirtualMode имеет значение true.

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

Глифы ошибок для ячеек и строк отображаются, только если свойства ShowCellErrors и ShowRowErrors имеют значение true.

CellContextMenuStripNeeded

RowContextMenuStripNeeded

Используется элементом управления для извлечения ячейки или строки ContextMenuStrip, если задано свойство DataSource или свойство VirtualMode имеет значение true.

RowHeightInfoNeeded

RowHeightInfoPushed

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

Рекомендации по использованию виртуального режима

При реализации виртуального режима в целях эффективной работы с большими объемами данных следует также обеспечить эффективность использования самого элемента управления DataGridView. Дополнительные сведения об эффективном использовании стилей ячеек, автоматического изменения размеров, выделения и совместного использования строк см. в разделе Масштабирование элемента управления DataGridView в Windows Forms.

См. также

Задачи

Пример. Реализация виртуального режима для элемента управления DataGridView в Windows Forms

Основные понятия

Масштабирование элемента управления DataGridView в Windows Forms

Реализация виртуального режима с JIT-загрузкой данных для элемента управления DataGridView в Windows Forms

Ссылки

DataGridView

VirtualMode

Другие ресурсы

Оптимизация производительности элемента управления DataGridView в Windows Forms