как отсортировать строку как число в datagridview в winforms - PullRequest
14 голосов
/ 20 апреля 2010

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

colid.ValueType = typeof(int);
grid.Sort(colid, ListSortDirection.Descending);

но это как строка, например:

11
12
23
7
80
81

при ожидаемом

7
11
12
23
80
81

Ответы [ 4 ]

21 голосов
/ 20 апреля 2010

Вы можете зарегистрироваться на событие SortCompare, например:

private void customSortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
    int a = int.Parse(e.CellValue1.ToString()), b = int.Parse(e.CellValue2.ToString());

    // If the cell value is already an integer, just cast it instead of parsing

    e.SortResult = a.CompareTo(b);

    e.Handled = true;
}

...
yourGridview.SortCompare += customSortCompare;
...

Я не проверял, работает ли это, но вы поняли ...;)

9 голосов
/ 19 июля 2014

Вы можете просто конвертировать в Int32, когда присваиваете значение столбцу

DataGridView.Cells["example"].Value= Convert.ToInt32(text);

И он будет правильно сортироваться

1 голос
/ 21 октября 2018

Ваша проблема в том, что вы сортируете строковые значения. Когда вы загружаете столбец, вы должны выбрать тип значений в столбце следующим образом:

dt.Columns.Add ("ColumnName", typeof (int));

0 голосов
/ 20 апреля 2010

Создайте класс как:

class Sort : IComparer
{
    public int Compare(object x, object y)
    {
        return -int.Parse((string)x).CompareTo(int.Parse((string)y)); //sort descending
        //return int.Parse((string)x).CompareTo(int.Parse((string)y)); //sort ascending
    }
}

и сделайте

grid.Sort( new Sort() );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...