Сортировка¶
Data Grid позволяет сортировать данные по неограниченному количеству столбцов. Пользователь может отсортировать данные по столбцу, щелкнув заголовок столбца или используя контекстное меню заголовка столбца.
Действия конечного пользователя¶
Во время выполнения программы пользователь может один раз щелкнуть заголовок столбца, чтобы отсортировать данные в порядке возрастания. Последующий щелчок изменяет порядок сортировки на противоположный. Чтобы отменить сортировку, удерживайте нажатой клавишу CTRL и щелкните заголовок столбца.
Если данные отсортированы и требуется дополнительная сортировка по другому столбцу, щелкните заголовок этого столбца, удерживая нажатой клавишу SHIFT. Контрол будет сортировать данные по первому щелкнутому столбцу, затем по второму столбцу и так далее.
Чтобы отсортировать данные по определенному столбцу, пользователи также могут воспользоваться контекстным меню заголовка столбца. Меню содержит команды "Сортировать по возрастанию" и "Сортировать по убыванию". Если столбец отсортирован, в меню содержится команда "Очистить сортировку".
Вы можете запретить сортировку определенных столбцов пользователями. Используйте для этой цели следующие свойства:
DataGridControl.AllowSorting
— Указывает, может ли пользователь выполнять сортировку/группировку по любому столбцу.ColumnBase.AllowSorting
— Указывает, может ли пользователь сортировать и группировать определенный столбец.
Эти свойства не мешают вам сортировать данные в коде.
Сортировка в коде¶
Вы можете использовать следующие свойства, чтобы указать свойства сортировки для столбцов:
-
ColumnBase.SortDirection
— задает порядок сортировки. Вы можете установить для этого свойства значениеAscending
илиDescending
, чтобы отсортировать столбец. Когда вы инициализируете это свойство, столбец добавляется во внутреннюю коллекцию отсортированных столбцов Data Grid. Установите для свойстваSortDirection
значениеnull
, чтобы очистить сортировку для этого столбца, и удалите столбец из коллекции отсортированных столбцов. -
ColumnBase.SortIndex
— Указывает индекс столбца, начинающийся с нуля, в коллекции отсортированных столбцов. Контрол Data Grid сортирует данные сначала по первому отсортированному столбцу, затем по второму отсортированному столбцу и так далее. Вы можете присвоить свойствуSortIndex
неотрицательное значение, чтобы отсортировать этот столбец в порядке возрастания. Установите дляSortIndex
значение-1
, чтобы отменить сортировку по этому столбцу.
Вызовите унаследованный метод DataControlBase.ClearSorting
контрола, чтобы удалить сортировку, примененную ко всем столбцам.
Следующий код очищает сортировку, а затем сортирует данные по двум столбцам:
dataGrid1.ClearSorting();
gridColumn1.SortDirection = ListSortDirection.Ascending;
gridColumn3.SortDirection = ListSortDirection.Descending;
Вы можете обернуть свой код методами BeginDataUpdate
и EndDataUpdate
, чтобы предотвратить ненужные обновления при изменении множества свойств контрола (включая свойства сортировки).
dataGrid1.BeginDataUpdate();
dataGrid1.ClearSorting();
gridColumn1.SortIndex = 0;
gridColumn3.SortIndex = 1;
gridColumn2.SortDirection = ListSortDirection.Descending;
dataGrid1.EndDataUpdate();
Настройка логики сортировки¶
Data Grid может сортировать (и группировать ) столбцы по редактируемым значениям, отображаемым значениям или в соответствии с пользовательским алгоритмом сортировки. Режим сортировки (и группирования) по умолчанию зависит от встроенного редактора столбцов и типа данных привязанного свойства:
- Сортировка/группировка по значениям редактирования — все столбцы, кроме тех, у которых есть встроенный ComboBoxEditor.
- Сортировка/группировка по тексту отображения — столбцам со встроенным ComboBoxEditor.
- Нет сортировки/группировки — столбцы привязаны к объектам, которые не реализуют интерфейс
IComparable
. Например, типы данных картинок не реализуют этот интерфейс, поэтому сортировка по соответствующим столбцам недоступна по умолчанию. Смотрите раздел Пользовательская сортировка ниже для получения информации о том, как принудительно отсортировать эти столбцы.
Используйте свойство ColumnBase.SortMode
, чтобы изменить режим сортировки/группировки для столбца. Доступны следующие опции:
SortMode.Value
— Сортировка/группировка по значениям редактирования ячеек.SortMode.DisplayText
— Сортировка/группировка текста по ячейкам.-
SortMode.Custom
— Включает пользовательскую сортировку и группировку. Задайте свойствуSortMode
значениеCustom
, а затем обработайте событиеDataGridControl.CustomColumnSort
и/илиDataGridControl.CustomColumnGroup
для реализации пользовательской сортировки и/или пользовательской логики группировки. Дополнительную информацию смотрите по следующим ссылкам:
Пользовательская сортировка¶
Событие CustomColumnSort
позволяет вам реализовать пользовательскую логику сортировки для определенного столбца. Установите для свойства ColumnBase.SortMode
значение Custom
, чтобы включить это событие.
Если связанный тип данных столбца не реализует интерфейс IComparable
(например, тип данных картинка), Data Grid по умолчанию запрещает сортировку для этого столбца. Однако вы можете включить сортировку для этого столбца следующим образом:
- Установите для свойства
AllowSorting
столбца значениеtrue
(значение этого свойства по умолчанию -null
). - Установите для свойства
SortMode
столбца значениеCustom
. - Обработайте событие
CustomColumnSort
для реализации пользовательской сортировки.
Когда вы обрабатываете событие CustomColumnSort
, вы должны сравнить две строки, указанные в аргументах события. Присвоьте результат сравнения параметру события Result
следующим образом:
-
Установите для
Result
значение-1
, если первая строка должна отображаться над второй строкой при сортировке данных в порядке возрастания. -
Установите для
Result
значение1
, если первая строка должна отображаться ниже второй строки при сортировке данных в порядке возрастания. -
Установите для
Result
значение0
, если две строки равны.
Следующий пример обрабатывает событие DataGridControl.CustomColumnSort
для сортировки данных в столбце "FileName" произвольным способом. В столбце "FileName" хранятся имена файлов в стандартном формате "filename.ext". Пользовательская процедура сортировки сортирует имена файлов по их расширениям.
<mxdg:DataGridControl Name="dataGrid1" CustomColumnSort="DataGrid_CustomColumnSort">
<mxdg:DataGridControl.Columns>
<mxdg:GridColumn Width="*" FieldName="FileName" SortMode="Custom" />
</mxdg:DataGridControl.Columns>
</mxdg:DataGridControl>
private void DataGrid_CustomColumnSort(object? sender, DataGridCustomColumnSortEventArgs e)
{
if (e.Column.FieldName == "FileName")
{
string fileName1 = Convert.ToString(e.Value1);
string fileName2 = Convert.ToString(e.Value2);
string newfileName1 = extractFileExtension(fileName1) + "." + fileName1;
string newfileName2 = extractFileExtension(fileName2) + "." + fileName2;
e.Result = String.Compare(newfileName1, newfileName2);
}
}
string extractFileExtension(string fileName)
{
string res = "";
int dotIndex = fileName.LastIndexOf('.');
if (dotIndex > 0)
res = fileName.Substring(dotIndex + 1);
return res;
}
Ответ на сортировку данных¶
Обработайте следующие события для выполнения пользовательских действий при сортировке данных:
DataControlBase.StartSorting
— срабатывает, когда данные собираются для сортировки.DataControlBase.EndSorting
— Срабатывает по завершении сортировки данных.
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.