Сортировка datagridview по столбцу с разными типами данных - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток, простите, если где-то было, но гугл ничего не дает по запросу.

Задача:

Имеется datagridview, в которой имеются некоторые данные, в частности, столбец с порядковым номером 2, в котором содержатся номера квартир. Необходимо сделать сортировку по этому столбцу по возрастанию.

Условия:

Таблица заполняется программно из множества xml файлов (без всяких datasource, переделывать уже не вариант, т.к. скоро сдавать), тип string. НО есть один файл, в котором номер квартиры - это номер помещения, а он == -I(7-33);I(1-30).

Вопрос:

До появления этого самого номера помещения таблица прекрасно сортировалась методом
 dataGridView1.Sort(dataGridView1.Columns[2], ListSortDirection.Ascending);
путем перевода string в Int32 (т.к. если сортировать в string, то он выдает сперва, например, 146, а потом 10, а потом 147). Теперь же, естественно, при переводе он выдает ошибку, а сортировать с двумя разными форматами в столбце не умеет. Помогите, пожалуйста.

Решение задачи: «Сортировка datagridview по столбцу с разными типами данных»

textual
Листинг программы
        private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
        {
            var myColumn = 0;//номер колонки с нестандартной сортировкой
            if (e.Column.Index == myColumn)
            {
                var s1 = e.CellValue1.ToString();
                var s2 = e.CellValue2.ToString();
                e.SortResult = ToInt(s1).CompareTo(ToInt(s2));
 
                e.Handled = true;
            }
        }
 
        private ulong ToInt(string s)
        {
            var num = 0ul;
            foreach (Match m in Regex.Matches(s, @"\d+"))
                num = num * 1000 + ulong.Parse(m.Value);
 
            return num;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5