简体   繁体   中英

Sorting in DataTable in C#

I have One DataTable Like This I can not rearrange this data table as i want. My DataTable is

ID   DetailID  Name FirstName LastName Middle Year class Line 
4000  41001     x     y         z        z     y     z     1
4000  41002     x     y         z        z     y     z     1
4000  41003     x     y         z        z     y     z     1
4000  41004     x     y         z        z     y     z     1
4000  41005     x     y         z        z     y     z     1
4000  41006     x     y         z        z     y     z     1
4001  41007     x     y         z        z     y     z     2
4001  41008     x     y         z        z     y     z     2
4001  41009     x     y         z        z     y     z     2
4001  41010     x     y         z        z     y     z     2
4001  41011     x     y         z        z     y     z     2
4002  41012     x     y         z        z     y     z     3
4002  41013     x     y         z        z     y     z     3
4002  41014     x     y         z        z     y     z     3
4002  41015     x     y         z        z     y     z     3
4002  41016     x     y         z        z     y     z     3

and i want to arrange this DataTable by Line Column. Like this

ID   DetailID  Name FirstName LastName Middle Year class Line 
4000  41001     x     y         z        z     y     z     1
4001  41007     x     y         z        z     y     z     2
4002  41012     x     y         z        z     y     z     3
4000  41002     x     y         z        z     y     z     1
4001  41008     x     y         z        z     y     z     2
4002  41013     x     y         z        z     y     z     3
4000  41003     x     y         z        z     y     z     1
4001  41009     x     y         z        z     y     z     2
4002  41014     x     y         z        z     y     z     3
4000  41004     x     y         z        z     y     z     1
4001  41010     x     y         z        z     y     z     2
4002  41015     x     y         z        z     y     z     3
4000  41005     x     y         z        z     y     z     1
4001  41011     x     y         z        z     y     z     2
4002  41016     x     y         z        z     y     z     3
4000  41006     x     y         z        z     y     z     1

so, how can i do this , please help me to arrange this datatable.

I tested it and it works. You can probably try to make it simpler.

dataTable.Columns.Add(new DataColumn("SortOrder", System.Type.GetType("System.Int32")));
var iCount = 0;
var previousLine = 0;

foreach (DataRow row in dataTable.Rows)
{
    var Line = Convert.ToInt32(row["Line"]);

    if (previousLine != Line)
        iCount = 0;

    previousLine = Line;

    row["SortOrder"] = Line + iCount * 3;
    iCount++;
}

dataTable.DefaultView.Sort = "SortOrder Asc";

dataTable = dataTable.DefaultView.ToTable();

Try this

Method 1:

var newDataTable = yourtable.AsEnumerable()
                   .OrderBy(r=> r.Field<int>("ID"))
                   .ThenBy(r=> r.Field<int>("DetailID"))  
                   .CopyToDataTable();

Method 2:

DataTable dt= new DataTable();

        DataView dv = new DataView(dt);
        dv.Sort = "ID, DetailID ASC";

简单点:

dt.DefaultView.Sort = "MyCol ASC";

LINQ是你的朋友

var sortedTable = sourceTable.AsEnumberable().OrderBy(r => r.Field<int>("Line")).Select(r => r).CopyToDataTable();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM