БлогNot. Сортируем столбцы DataGridView по внешнему событию

Сортируем столбцы DataGridView по внешнему событию

Вообще-то сортировка в компоненту DataGridView из Visual Studio уже заложена по клику на заголовке нужного столбца, но иногда требуется сделать её "вручную" по какому-либо событию, например, по нажатию кнопки в окне приложения.

Код ниже показывает, как этого добиться, он подойдёт для вставки в любой обработчик события.

Предполагается, что обрабатываемая компонента называется dataGridView1, в ней есть столбцы и настроено их выделение:

  • в "Правке столбцов" выставлено свойство SortMode = Programmatic на все столбцы;
  • свойство SelectionMode компоненты выставлено в значение FullColumnSelect.

настройка столбцов dataGridView в конструкторе форм Visual Studio
настройка столбцов 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 [5137 просмотров]


теги: c++ программирование c++/cli

К этой статье пока нет комментариев, Ваш будет первым