Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to sort string as number in datagridview in winforms

I have string column with numbers in a datagridview.It is not bound, I would like to sort it number wise I used

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

but is sorts like string eg:

11
12
23
7
80
81

while the expected is

7
11
12
23
80
81
like image 670
Thunder Avatar asked Apr 20 '10 11:04

Thunder


3 Answers

You can register on the SortCompare event, for example:

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;
...

I didn't check if that works, but you get the idea... ;)

like image 147
AndiDog Avatar answered Nov 08 '22 20:11

AndiDog


You can just convert to Int32 when you assign value to column

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

And it will sort correctly

like image 43
user2612427 Avatar answered Nov 08 '22 20:11

user2612427


Your problem is that you sort string values. When you load column you must choose type of values in column like that:

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

like image 2
Fipomat Avatar answered Nov 08 '22 20:11

Fipomat