Сортируем столбцы DataGridView по внешнему событию
Вообще-то сортировка в компоненту DataGridView
из Visual Studio уже заложена по клику на заголовке нужного столбца, но иногда требуется сделать её "вручную" по какому-либо событию, например, по нажатию кнопки в окне приложения.
Код ниже показывает, как этого добиться, он подойдёт для вставки в любой обработчик события.
Предполагается, что обрабатываемая компонента называется dataGridView1
, в ней есть столбцы и настроено их выделение:
- в "Правке столбцов" выставлено свойство
SortMode
=Programmatic
на все столбцы; - свойство
SelectionMode
компоненты выставлено в значениеFullColumnSelect
.
настройка столбцов dataGridView в конструкторе форм Visual Studio
DataGridViewColumn ^ newColumn = (dataGridView1->Columns->GetColumnCount(DataGridViewElementStates::Selected) == 1 ? dataGridView1->SelectedColumns[0] : nullptr); DataGridViewColumn ^ oldColumn = dataGridView1->SortedColumn; ListSortDirection direction; if (oldColumn != nullptr) { if (oldColumn == newColumn && dataGridView1->SortOrder == SortOrder::Ascending) { //Сортируем повторно по прежнему столбцу, поменяв направление сортировки direction = ListSortDirection::Descending; } else { //Сортируем по новому столбцу и удаляем старый SortGlyph direction = ListSortDirection::Ascending; oldColumn->HeaderCell->SortGlyphDirection = SortOrder::None; } } else { // Если oldColumn пуст, DataGridView не сортирована direction = ListSortDirection::Ascending; } if (newColumn == nullptr) { //Нет выделенного столбца - сообщить об ошибке MessageBox::Show("Выберите один столбец и попытайтесь отсортировать снова", "Ошибка: Неверное выделение", MessageBoxButtons::OK, MessageBoxIcon::Error); } else { //Сама процедура dataGridView1->Sort(newColumn, direction); newColumn->HeaderCell->SortGlyphDirection = (direction == ListSortDirection::Ascending ? SortOrder::Ascending : SortOrder::Descending); }
19.12.2016, 13:22 [5306 просмотров]