2014-03-07 66 views
2

我有一個DataTable必須被排序,但是我想要將特定行作爲最後一行返回,即使在對DataTable進行排序之後。我將通過一個獨特的列中的字符串值來識別這一行。在DataTable中更改行位置或在DataTable中移動行

public DataTable StandardReport3B(string missionId, string reportType, string startDate, string endDate) 
    { 
     List<long> missionIdList = new List<long>(); 
     string[] missionIds = missionId.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 

     foreach (string mission in missionIds) 
     { 
      missionIdList.Add(Convert.ToInt64(mission)); 
     } 

     DataTable dt = new DataTable(); 
     object reportData = null; 

     using (var ctx = new MedicalServiceEntities()) 
     { 
      reportData = ctx.GetData(startDate, endDate, missionId).ToList(); 
     } 

     dt = this.GenericListToDataTable(reportData); 

     DataView dv = dt.DefaultView; 
     dv.Sort = dt.Columns[0].ColumnName + " Asc"; 
     return dv.ToTable(); 
    } 

回答

3

您可以使用LINQ-to-DataSet

dt = dt.AsEnumerable() 
    .OrderBy(r => r.Field<string>(0) == "Special Value") 
    .ThenBy(r => r.Field<string>(0)) 
    .CopyToDataTable(); 

做是因爲比較返回要麼truefalsefalse爲 「低」。

+0

超級酷............... – StackTrace

+0

謝謝@tim,這節省了我的幾個小時 – Devjosh

0

我將通過一個字符串值來識別該行。

什麼:

dv.Sort = "ParticularColumn ASC, " + dt.Columns[0].ColumnName + " ASC"> 

其中「ParticularColumn」是與除非你想成爲最後一個所有行相同,低的值的列 - 這行有更高的價值。