Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sort string items in a datatable as int using c#

Tags:

c#

sorting

I have some numeric codes stored in a DataTable. When I try to sort it using DataView it sorts the column by string. What is the easiest way to sort the data as integer/number?

DataView view = dt.DefaultView();
view.Sort = "Code asc";
dt = view.ToTable();

Data in datatable: 128, 123, 112, 12, 126

after sort it shows: 112, 12, 123, 126, 128

expected result: 12, 112, 123, 126, 128

like image 954
Sri Reddy Avatar asked Sep 27 '11 16:09

Sri Reddy


2 Answers

Here is working example. You can create another DataTable via Clone, and change the data type of the column to Int and copy the data.

    DataTable dt = GetTable(); // Assume this method returns the datatable from service      
    DataTable dt2 = dt.Clone();
    dt2.Columns["Code"].DataType = Type.GetType("System.Int32");

    foreach (DataRow dr in dt.Rows)
    {
        dt2.ImportRow(dr);
    }
    dt2.AcceptChanges();
    DataView dv = dt2.DefaultView;
    dv.Sort = "Code ASC";
like image 124
SaQiB Avatar answered Oct 21 '22 09:10

SaQiB


One option is to add a Calculated column with the right type and sort on it.

Like this:

dt.Columns.Add( "Int32_Code", typeof( int ), "Code" );
dt.DefaultView.Sort("Int32_Code");
dt = dt.DefaultView.ToTable();
like image 36
Eliezer Santana Avatar answered Oct 21 '22 09:10

Eliezer Santana