Show / Hide Table of Contents

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

DataGridView Управления предназначен для обеспечения максимальной масштабируемости. Если требуется для отображения больших объемов данных, необходимо следовать рекомендациям, приведенным в этом разделе, чтобы избежать использования большого объема памяти или замедления работы пользовательский интерфейс (UI). В этом разделе обсуждаются следующие вопросы:

  • Эффективное использование стилей для ячейки

  • Эффективное использование контекстных меню

  • Использование автоматического изменения размеров эффективно

  • Эффективное использование выбранные коллекции ячеек, строк и столбцов

  • Использование общих строк

  • Предотвращение строкам

Если у вас есть особые требования к производительности, можно реализовать виртуальный режим и предоставить собственные операции управления данными. Дополнительные сведения см. в разделе режимы отображения данных в элементе управления DataGridView Windows Forms.

Эффективное использование стилей для ячейки

Каждой ячейки, строки и столбца может иметь свои собственные сведения о стиле. Сведения о стиле хранится в DataGridViewCellStyle объектов. Создание объектов стиля ячеек для множества отдельных DataGridView элементы могут быть неэффективным, особенно при работе с большими объемами данных. Чтобы избежать снижения производительности, следуйте приведенным ниже рекомендациям:

  • Не рекомендуется устанавливать свойства стиля ячейки для отдельных DataGridViewCell или DataGridViewRow объектов. Сюда входят строки объекта, заданного параметром RowTemplate свойство. Каждой новой строки, которая клонируется из шаблона строки получит свою собственную копию объекта стиля шаблона ячейки. Для максимальной масштабируемости, задайте свойства стиля ячейки в DataGridView уровень. Например, задать DataGridView.DefaultCellStyle свойства, а не DataGridViewCell.Style свойство.

  • Если некоторые ячейки требуется форматирования, отличные от форматирования по умолчанию, используйте тот же DataGridViewCellStyle экземпляра на группы ячеек, строк или столбцов. Избегайте прямого задания свойств типа DataGridViewCellStyle на отдельных ячеек, строк и столбцов. Пример совместного использования стиля ячеек, см. в разделе как: Установка стилей ячейки по умолчанию для управления DataGridView в Windows Forms. Можно также избежать снижения производительности при задании стили ячеек по отдельности, обрабатывая CellFormatting обработчик событий. Пример см. в статье Практическое руководство. Настройка форматирования данных в элементе управления DataGridView Windows Forms.

  • При определении стиля ячейки, используйте DataGridViewCell.InheritedStyle свойства, а не DataGridViewCell.Style свойство. Доступ к Style свойство создает новый экземпляр класса DataGridViewCellStyle , если свойство не уже используется. Кроме того этот объект может не содержать полные сведения о стиле для ячейки, если некоторые стили наследуются от строк, столбцов или элемента управления. Дополнительные сведения о наследовании стилей ячеек, см. в разделе стили ячеек элемента управления DataGridView Windows Forms в.

Эффективное использование контекстных меню

Каждой ячейки, строки и столбца может иметь собственное контекстное меню. Контекстные меню в DataGridView управления представлены ContextMenuStrip элементов управления. Как и в объекты стиля ячейки, Создание контекстного меню для множества отдельных DataGridView элементов может отрицательно сказаться на производительности. Чтобы избежать потерь производительности, следуйте приведенным ниже рекомендациям:

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

  • Если требуется несколько контекстных меню для нескольких строк или ячеек, обрабатывать CellContextMenuStripNeeded или RowContextMenuStripNeeded события. Эти события позволяют управлять объектами контекстного меню самостоятельно, что позволяет настроить производительность.

Использование автоматического изменения размеров эффективно

Строк, столбцов и заголовков может автоматически изменяться при изменении содержимого ячеек, все содержимое ячейки отображаются без обрезки. Изменение режима изменения размеров можно также изменить размер строк, столбцов и заголовков. Чтобы определить правильный размер DataGridView элемент управления должен проверить значение каждой ячейки, в нем. При работе с большими наборами данных этого анализа может отрицательно повлиять на производительность элемента управления при выполнении автоматического изменения размеров. Чтобы избежать снижения производительности, следуйте приведенным ниже рекомендациям:

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

    • Для строк и столбцов, используйте DisplayedCells или DisplayedCellsExceptHeaders поле DataGridViewAutoSizeRowsMode, DataGridViewAutoSizeColumnsMode, и DataGridViewAutoSizeColumnMode перечисления.

    • Заголовки строк, используйте AutoSizeToDisplayedHeaders или AutoSizeToFirstHeader поле DataGridViewRowHeadersWidthSizeMode перечисления.

  • Для максимальной масштабируемости выключите автоматического изменения размеров и используйте программного изменения размеров.

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

Эффективное использование выделенных ячеек, строк и столбцов коллекций

SelectedCells Коллекции, неэффективно с большой выбор. SelectedRows И SelectedColumns коллекции также могут быть неэффективным, хотя и в меньшей степени, так как существует много меньше строк, чем ячеек в стандартном DataGridView элемента управления и гораздо меньше столбцов, чем строк. Чтобы избежать снижения производительности при работе с этими коллекциями, следуйте приведенным ниже рекомендациям:

  • Чтобы определить ли все ячейки в DataGridView были выбраны перед обращением к содержимое SelectedCells коллекции, проверьте возвращаемое значение AreAllCellsSelected метод. Обратите внимание, что этого метода может привести к строкам. Дополнительные сведения см. в следующем разделе.

  • Избегайте использования Count свойство System.Windows.Forms.DataGridViewSelectedCellCollection для определения числа выделенных ячеек. Вместо этого используйте DataGridView.GetCellCount метод и передать DataGridViewElementStates.Selected значение. Аналогичным образом использовать DataGridViewRowCollection.GetRowCount и DataGridViewColumnCollection.GetColumnCount методы, чтобы определить количество выбранных элементов, а не доступ к коллекции выбранных строк и столбцов.

  • Избегайте режимы выбора на основе ячеек. Вместо этого задайте DataGridView.SelectionMode свойства DataGridViewSelectionMode.FullRowSelect или DataGridViewSelectionMode.FullColumnSelect.

Использование общих строк

Эффективного использования памяти производится в DataGridView управления с помощью общих строк. Строки будут совместно использовать как можно больше сведений о об их внешний вид и поведение, предоставив экземпляров DataGridViewRow класса.

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

Строки не могут совместно использоваться несвязанного DataGridView элемента управления, если какие-либо ячейки содержат значения. Когда DataGridView управления привязан к внешнему источнику данных или при реализации виртуального режима и предоставить свой собственный источник данных, значения ячеек, хранятся за пределами элемента управления, а не в объектах ячеек, что строк для совместного использования.

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

Например строки не может использоваться в любом из следующих ситуаций:

  • Строка содержит один выбранной ячейки, который не находится в выбранном столбце.

  • Строка содержит ячейку с его ToolTipText или ContextMenuStrip заданными свойствами.

  • Строка содержит DataGridViewComboBoxCell с его Items набор свойств.

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

DataGridView Управления автоматически будет пытаться использовать общие строки каждый раз, когда строки добавляются к DataGridViewRowCollection. Чтобы убедиться, что строки являются общими, следуйте приведенным ниже рекомендациям:

  • Избегайте вызова Add(Object[]) перегрузки Add метод и Insert(Object[]) перегрузки Insert метод DataGridView.Rows коллекции. Эти перегрузки автоматически создавать строки с монопольным доступом.

  • Убедитесь, что строки, заданной в DataGridView.RowTemplate свойство может использоваться в следующих случаях:

    • При вызове Add() или Add(Int32) перегруженные версии Add метод или Insert(Int32,Int32) перегрузки Insert метод DataGridView.Rows коллекции.

    • При увеличении значения DataGridView.RowCount свойство.

    • При задании DataGridView.DataSource свойство.

  • Убедитесь, что к строке, указанной indexSource параметр может использоваться при вызове AddCopy, AddCopies, InsertCopy, и InsertCopies методы DataGridView.Rows коллекции.

  • Убедитесь, что указанной строки или строк могут использоваться при вызове Add(DataGridViewRow) перегрузки Add метод, AddRange метод, Insert(Int32,DataGridViewRow) перегрузки Insert метод и InsertRange метод DataGridView.Rowsколлекции.

Чтобы определить, является ли общим строки, используйте DataGridViewRowCollection.SharedRow метод для извлечения объекта строки, а затем проверить объекта Index свойство. Общие строки всегда имеют Index значение свойства равно – 1.

Предотвращение строкам

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

Для предотвращения строк строкам, следуйте приведенным ниже рекомендациям:

  • Следует избегать индексирования Rows коллекции или перебирать его с foreach цикла. Не потребуется обычно прямой доступ к строкам. DataGridView методы, которые работают в строках принимать аргументы индекс строки, а не экземпляров строк. Кроме того обработчики для событий, связанных со строками, получают объектов аргументов событий с помощью свойств строки, которые можно использовать для операций со строками, не вызывая их к строкам.

  • Если вам требуется доступ к объекту строки, используйте DataGridViewRowCollection.SharedRow метод и передайте фактический индекс строки. Обратите внимание, что изменения объекта совместно используемой строкой, извлекаемых с помощью этого метода будет изменять все строки, которые совместно используют этот объект. Строки для новых записей не используется совместно с других строк, тем не менее, поэтому он не будут затронуты при изменении любых других строк. Обратите внимание, что различные строки, представленной в общей строке могут иметь различные контекстные меню. Чтобы получить правильный контекстное меню из экземпляра общей строки, используйте GetContextMenuStrip метод и передайте фактический индекс строки. Если доступ к совместно используемой ContextMenuStrip свойство вместо этого он будет использовать индекс совместно используемой строкой-1 и не получает соответствующее контекстное меню.

  • Следует избегать индексирования DataGridViewRow.Cells коллекции. Прямой доступ к ячейке приведет к ее родительской строки к строкам, создания нового DataGridViewRow. Обработчики для событий, связанных с ячейки получают объектов аргументов событий со своими свойствами ячейки, которые можно использовать для операций с ячейками, не вызывая к строкам. Можно также использовать CurrentCellAddress свойство для извлечения индексы строки и столбца текущей ячейки без прямого доступа к ячейке.

  • Избегайте режимы выбора на основе ячеек. Эти режимы привести к строкам. Вместо этого задайте DataGridView.SelectionMode свойства DataGridViewSelectionMode.FullRowSelect или DataGridViewSelectionMode.FullColumnSelect.

  • Не обрабатывают DataGridViewRowCollection.CollectionChanged или DataGridView.RowStateChanged события. Эти события привести к строкам. Кроме того, не следует вызывать DataGridViewRowCollection.OnCollectionChanged или DataGridView.OnRowStateChanged методы, которые инициируют эти события.

  • Не обращаются к DataGridView.SelectedCells коллекции при DataGridView.SelectionMode свойство имеет значение FullColumnSelect, ColumnHeaderSelect, FullRowSelect, или RowHeaderSelect. В результате все выбранные строки к строкам.

  • Не вызывайте DataGridView.AreAllCellsSelected метод. Этого метода может привести к строкам.

  • Не вызывайте DataGridView.SelectAll метод при DataGridView.SelectionMode свойство имеет значение CellSelect. В результате все строки к строкам.

  • Не устанавливайте ReadOnly или Selected свойство ячейки для false Если присвоить соответствующее свойство в столбце true. В результате все строки к строкам.

  • Не открывайте DataGridViewRowCollection.List свойство. В результате все строки к строкам.

  • Не вызывайте Sort(IComparer) перегрузки Sort метод. Сортировка с использованием пользовательского модуля сравнения вызывает всех строк.

См. также

  • DataGridView
  • Оптимизация производительности элемента управления DataGridView в Windows Forms
  • Виртуальный режим элемента управления DataGridView в Windows Forms
  • Режимы отображения данных в элементе управления DataGridView в Windows Forms
  • Стили ячеек элемента управления DataGridView в Windows Forms
  • Практическое руководство. Установка стилей ячейки по умолчанию для элемента управления DataGridView в Windows Forms
  • Изменение размеров управления DataGridView в Windows Forms
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX