Sort string items in a datatable as int using c#
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
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";
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();
When you are creating a column in data table, define it as typeof(int)
dt.Columns.Add("Code", typeof(int));