Как отсортировать заголовки столбцов в сетке данных по алфавиту? C#
У меня есть отсортированный список, который содержит заголовки столбцов, как мне переставить мое представление данных, чтобы оно было в том же порядке, что и мой отсортированный список?
Я пробовал приведенный ниже код, но это не всегда работает, некоторые столбцы отсортированы неправильно. Спасибо за любую помощь с этим.
sortedColumnNames.Sort();
foreach (DataGridViewColumn col in dataGridView1.Columns)
{
col.DisplayIndex = sortedColumnNames.IndexOf(col.HeaderText);
}
sortedColumnNames: Афины, Крит, Корфу, Кефалония, Миконос, Родос, Санторини, Скиатос, Занте
3 ответа
Я не могу сказать, если ваша проблема в том, что SortedColumnNames
неправильно отсортировано (что не так), или если столбцам назначен другой порядок, чем в списке.
Если это последнее, возможно, это происходит потому, что вы изменяете порядок элементов в коллекции, пока вы итерируете его. Хотя я не вижу, чтобы это произошло ни в одном из тестов, которые я выполняю.
Как правило, я не связываюсь с членством или порядком в коллекции, которую я повторяю. Я реализую сортировку столбцов следующим образом:
void SortDataGridViewColumns(DataGridView dgv)
{
var list = from DataGridViewColumn c in dgv.Columns
orderby c.HeaderText
select c;
int i = 0;
foreach (DataGridViewColumn c in list)
{
c.DisplayIndex = i++;
}
}
Вы можете сделать это следующим образом:
- Добавить все столбцы в список tmpColumns
- Удалить все столбцы из dgv.Columns
- Сортировать tmpColumns по имени
- Добавьте столбцы обратно в dgv.Columns из tmpColumns и установите, пока он DisplayIndex, в следующие значения 0,1,2 и так далее.
Это не идеально, но это работает.
Похоже, это должно работать. Я только что написал быстрое приложение для тестирования, и оно работало нормально. Можете ли вы прибить точно, когда он работает, а когда нет? Когда вы говорите, что они не работают, это всегда одни и те же столбцы, которые вышли из строя?