Группировка¶
Data Grid может группировать данные по одному или нескольким столбцам. Группировка данных объединяет строки с одинаковыми значениями в столбцах в одни и те же группы данных.
Пользователь может сгруппировать данные следующим образом:
- Перетащите заголовок столбца на панель "Группа".
-
Щелкните правой кнопкой мыши заголовок столбца и выберите команду "Сгруппировать по этому столбцу".
Чтобы разгруппировать данные, пользователь может выполнить одно из следующих действий:
- Перетащите заголовок столбца группы с панели "Группа".
-
Щелкните правой кнопкой мыши заголовок столбца группы и выберите команду "Разгруппировать".
Когда вы применяете группировку по столбцу, данные этого столбца сортируются . Пользователь может щелкнуть по заголовку столбца группы, чтобы изменить порядок сортировки.
Групповая панель¶
На панели групп контрол Grid для групповой панели групповой таблицы отображаются заголовки групповых столбцов. Пользователь может перетащить заголовок столбца на панель групп, чтобы сгруппировать по этому столбцу.
Используйте свойство ShowGroupPanel
DataGrid, чтобы указать видимость групповой панели. Пользователь может скрыть, а затем восстановить панель групп, используя контекстное меню заголовков столбцов:
Групповые столбцы¶
Когда вы группируете по столбцу, этот столбец перемещается из таблицы на панель групп. Свойство ShowGroupedColumns
имеет значение true
, чтобы отображать столбцы группы на панели групп и в таблице одновременно. На следующей картинке показано свойство настройки ShowGroupedColumns
:
Предотвращение группировки¶
Вы можете отключить свойство AllowSorting
столбца, чтобы запретить пользователю выполнять операции сортировки и группировки над этим столбцом.
Свойство DataGridControl.AllowSorting
позволяет вам запретить сортировку и групповые операции пользователей для любого столбца.
Если столбец не поддерживает сортировку (например, когда столбец отображает данные картинки или привязан к объекту, который не реализует интерфейс IComparable
), данные не могут быть сгруппированы по этому столбцу. Вы можете изменить это дефолтное поведение, как описано в следующем разделе: Настройка логики группировки .
Настройка логики группировки¶
Столбцы группы всегда отсортированы в порядке возрастания или убывания, как указано свойством ColumnBase.SortDirection
.
Во время операции группировки строки таблицы объединяются в группы в соответствии со значениями редактирования или отображения значений столбцов группы. Логика группировки и сортировки по умолчанию зависит от встроенного редактора столбцов и типа данных привязанного свойства:
- Группировка/сортировка по значениям редактирования — все столбцы, кроме тех, у которых есть встроенный ComboBoxEditor.
- Группировка/сортировка по тексту отображения — столбцам со встроенным ComboBoxEditor.
- Нет группировки/сортировки — столбцы, привязанные к объектам, которые не реализуют интерфейс
IComparable
. Например, типы данных картинок не реализуют этот интерфейс, таким образом, соответствующие столбцы не поддерживают операции сортировки и группировки по умолчанию. Чтобы принудительно отсортировать и сгруппировать эти столбцы, реализуйте пользовательскую сортировку и пользовательскую группировку для этих столбцов.
Свойство ColumnBase.SortMode
позволяет вам изменить режим сортировки/группировки для столбца. Доступны следующие опции:
SortMode.Value
— Сортировка/группировка по значениям редактирования ячеек.SortMode.DisplayText
— Сортировка/группировка текста по ячейкам.-
SortMode.Custom
— Включает пользовательскую сортировку и группировку. Задайте свойствуSortMode
значениеCustom
, а затем обработайте событиеDataGridControl.CustomColumnGroup
и/илиDataGridControl.CustomColumnSort
, чтобы реализовать пользовательскую логику группировки и/или пользовательской сортировки. Дополнительную информацию смотрите по следующим ссылкам:
Пользовательская группировка¶
Чтобы реализовать пользовательские правила группировки для определенного столбца(ов), установите для свойства ColumnBase.SortMode
столбца значение Custom
и обработайте событие DataGridControl.CustomColumnGroup
.
Событие CustomColumnGroup
срабатывает для каждого столбца группы для сравнения пар соседних строк сетки. При обработке этого события вам следует указать, следует ли объединять строки в одну группу.
Следующие параметры события позволяют идентифицировать групповые строки, значения и задать результат сравнения:
Column
— столбец обрабатываемой в данный момент группы.SourceItemIndex1
иSourceItemIndex2
— индексы в привязанном источнике объектов (DataGridControl.ItemsSource
) элементов (бизнес-объектов), которые соответствуют обрабатываемым в данный момент строкам таблицы.Value1
иValue2
— значения группового столбца в обрабатываемых в данный момент строках таблицы.Result
— Результат пользовательского сравнения. Задайте дляResult
значениеtrue
, чтобы поместить строки в одну группу. Установите дляResult
значениеfalse
, если строки необходимо поместить в разные группы. Установите дляResult
значениеnull
, чтобы применить логику группировки по умолчанию.
Чтобы повысить производительность контрола, срабатывает событие CustomColumnGroup
для сравнения строки с небольшим набором соседних строк сетки (в соответствии с текущим порядком сортировки). Это событие срабатывает не для всех возможных комбинаций двух строк сетки. Если вам нужно изменить логику сортировки строк по умолчанию и разместить определенные строки рядом друг с другом, обработайте событие ColumnView.CustomColumnSort
.
Пример - Группировка по годам При группировании по столбцу Даты и времени¶
Предположим, что контрол Data Grid содержит столбец HireDate, в котором отображаются значения даты и времени. При группировании по этому столбцу поведение контрола при группировке по умолчанию заключается в объединении строк с уникальными значениями даты и времени.
В этом примере применяются пользовательские правила группировки: строки группируются по части года значений HireDate. Для выполнения этой задачи свойству SortOrder
столбца HireDate присваивается значение Custom
, и обрабатываются следующие события:
DataGridControl.CustomColumnGroup
— Реализует пользовательскую логику группировки.DataGridControl.CustomGroupValueDisplayText
— Отображает годовую часть значения даты и времени в строках группы. Смотрите Текст группирующей строки .
В демонстрационных целях свойство ShowGroupedColumns
включено для одновременного отображения сгруппированного столбца HireDate на панели групп и в таблице.
dataGrid.Columns["HireDate"].SortMode = Eremex.AvaloniaUI.Controls.DataControl.SortMode.Custom;
dataGrid.CustomColumnGroup += DataGrid_CustomColumnGroup;
dataGrid.CustomGroupValueDisplayText += DataGrid_CustomGroupValueDisplayText;
dataGrid.ShowGroupedColumns = true;
private void DataGrid_CustomColumnGroup(object sender, DataGridCustomColumnGroupEventArgs e)
{
if (e.Column.FieldName != "HireDate")
return;
DateTime employeeHireDate1 = (DateTime)e.Value1;
DateTime employeeHireDate2 = (DateTime)e.Value2;
e.Result = employeeHireDate1.Year == employeeHireDate2.Year;
}
private void DataGrid_CustomGroupValueDisplayText(object sender, DataGridCustomGroupValueDisplayTextEventArgs e)
{
if (e.Column.FieldName != "HireDate")
return;
DateTime hireDate = (DateTime)e.Value;
e.DisplayText = hireDate.Year.ToString();
}
Группа в коде¶
Чтобы сгруппировать данные по столбцам в коде, выполните следующее:
- Отсортируйте этот столбец и позиции его (их) в начале отсортированной коллекции столбцов. Вы можете отсортировать столбец, используя свойства
SortIndex
иSortDirection
. Смотрите раздел Сортировка для получения дополнительной информации. - Задайте свойству
DataGridControl.GroupCount
значение количества столбцов группы.
Следующий код группирует данные по двум столбцам.
GridColumn column1 = dataGrid.Columns["EmploymentType"];
GridColumn column2 = dataGrid.Columns["Position"];
if(column1 != null && column2 != null)
{
dataGrid.BeginDataUpdate();
column1.SortIndex = 0;
column2.SortIndex = 1;
column2.SortDirection = System.ComponentModel.ListSortDirection.Descending;
dataGrid.GroupCount = 2;
dataGrid.EndDataUpdate();
}
В этом примере используются методы BeginDataUpdate
и EndDataUpdate
для предотвращения ненужных обновлений при изменении нескольких свойств группировки/сортировки. Data Grid обновляется только после вызова метода EndDataUpdate
.
Без использования методов BeginDataUpdate
и EndDataUpdate
Data Grid обновляется после каждого изменения любого свойства группы/сортировки.
За каждым вызовом метода BeginDataUpdate
должен следовать вызов метода EndDataUpdate
.
Группировать строки¶
Групповые строки используются для формирования иерархии строк при группировании данных. Они отображают значения соответствующих столбцов группы. Строки группы не существуют в связанном источнике объекта.
Определение строк группы¶
Индексы строк позволяют идентифицировать строки таблицы в коде. Строки группы имеют отрицательные индексы строк, в то время как индексы строк строк данных неотрицательны.
Свойство FocusedRowIndex
позволяет получить текущую сфокусированную группу или строку данных или переместить фокус на определенную группу или строку данных. Следующий код перемещает фокус на первую строку группы:
// If data is grouped, focus the first group row.
if (dataGrid.GroupCount > 0)
dataGrid.FocusedRowIndex = -1;
Смотрите также: Перемещение по строкам группы .
Разворачивать и сворачивать строки групп¶
Пользователь может разворачивать и сворачивать строки групп следующим образом:
-
Нажмите кнопку развернуть строку группы
-
Нажмите кнопки "+"/"-" и "→"/"←" клавиши на клавиатуре
В коде вы можете контролировать распахивание группирующей строки с помощью следующих элементов API:
AutoExpandAllGroups
— Указывает, следует ли автоматически распахивать группирующие строки после каждой операции группировки данных.CollapseAllGroups
— Сворачивает все группирующие строки.CollapseGroupRow
— Сворачивает строку группы.ExpandAllGroups
— Расширяет все группирующие строки.ExpandGroupRow
— Расширяет строку группы.IsGroupRow
— Указывает, является ли конкретная строка строкой группы.IsGroupRowExpanded
— Указывает, распахнута ли группирующая строка.
Перемещение по строкам группы¶
Строки группы владеют дочерними строками данных, и они также могут владеть другими строками группы, если данные сгруппированы по двум или более столбцам.
Используйте следующие методы для перебора строк группы и их дочерних элементов:
-
GetGroupChildRowCount
— Возвращает количество непосредственных дочерних строк указанной группирующей строки. Этот метод возвращает-1
, если указанная строка является строкой данных, поскольку строки данных не имеют дочерних элементов.Метод
GetGroupChildRowCount
без параметров возвращает количество строк группы на корневом уровне. Если данные не сгруппированы, эта перегрузка возвращает-1
. -
GetGroupChildRowIndex
— Возвращает индекс строки указанной дочерней строки. МетодGetGroupChildRowIndex
имеет две перегрузки:-
GetGroupChildRowIndex(int rowIndex, int childIndex)
— Получает индекс строки дочерней строки, принадлежащей указанной групповой строке. Дочерняя строка должна быть непосредственным дочерним элементом указанной группирующей строки. ПараметрrowIndex
указывает строку родительской группы. ПараметрchildIndex
определяет визуальную позицию целевой дочерней строки среди ее одноуровневых элементов. -
GetGroupChildRowIndex(int childIndex)
— Возвращает индекс строки корневой группы, отображаемой в позицииchildIndex
. ПараметрchildIndex
определяет визуальную позицию целевой строки корневой группы среди других строк корневой группы.
-
-
GetParentRowIndex
— Получает индекс строки строки родительской группы строки. Этот метод возвращает константуDataGridControl.InvalidRowIndex
для строк, у которых нет родительских элементов.
Группировать значения строк¶
Используйте метод GetGroupRowValue
для извлечения группового значения из определенной групповой строки.
Текст групповой строки¶
Текст по умолчанию, отображаемый в строках группы, определяется значениями соответствующих столбцов группы. Событие CustomGroupValueDisplayText
позволяет вам указать пользовательский текст для отображения в строках группы.
Это событие запускается повторно для каждой группирующей строки. Используйте аргументы события, чтобы определить текущую обрабатываемую строку группы и ее значение. Чтобы задать пользовательское отображаемое значение, задайте аргумент события DisplayText
.
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.