2016-11-12 104 views
1

我有一個數據表,排序的DataTable基於價值列

PId  PName Qty 
123  XYZ  2 
223  ABC  4 
434  PQR 33  

我想如果我通過PNAME爲「PQR」它排序「PNAME」,而不是遞增/遞減順序, ,然後如果我通過「ABC」,那麼PQR應該先出現,然後是其餘行, 應該先出現,然後是其餘行。 基本上想要重新排列第一行應該是我在變量中持有的「PName」的行。

感謝

所需的輸出 如果我有「ABC」,那麼上面的數據表中應重新洗牌的,

PId  PName Qty 
223  ABC  4 
123  XYZ  2 
434  PQR 33 

如果我有「PQR」,那麼上面的數據表中應重新洗牌的,

PId  PName Qty 
434  PQR 33 
123  XYZ  2 
223  ABC  4 
+0

你可以用linq嗎? – DMishra

+0

是的。你能告訴我它是如何工作的嗎? –

+0

請參閱我的答案,因爲需要澄清。 – DMishra

回答

2
DataTable dt = new DataTable(); 
    dt.Columns.Add("PId", typeof(Int32)); 
    dt.Columns.Add("PName", typeof(string)); 
    dt.Columns.Add("Qty", typeof(Int32)); 
    dt.Rows.Add(123, "XYZ", 2); 
    dt.Rows.Add(223, "ABC", 4); 
    dt.Rows.Add(434, "PQR", 33); 

    var stkLists = dt.AsEnumerable().ToList(); 
    var matchList = stkLists.Where(m => m["PName"].ToString().StartsWith("PQR")).ToList(); 
    var FinalList = matchList.Concat(stkLists.Except(matchList).ToList()); 
+0

「你的完整表格列表」,我需要完成y數據表可以列出? –

+0

列表中有窗體,這會給你想要的輸出並且不會對整個表進行排序。 – DMishra

+0

List stkLists = dtStk.AsEnumerable()。ToList(); var stkList = stkLists; var matchList = stkList.Where(m => m.PName.StartsWith(batchId))。ToList(); var FinalList = matchList.Concat(stkList.Except(matchList).ToList()); –

1

嘗試這樣的:

DataTable dt = new DataTable(); 
dt.Columns.Add("PId", typeof(Int32)); 
dt.Columns.Add("PName", typeof(string)); 
dt.Columns.Add("Qty", typeof(Int32)); 
dt.Rows.Add(123, "XYZ", 2); 
dt.Rows.Add(223, "ABC", 4); 
dt.Rows.Add(434, "PQR", 33); 



string Name = "PQR"; 
DataTable newDt = dt.Rows.Cast<DataRow>().Where(r => r.ItemArray[1] == Name).CopyToDataTable(); 
dt = dt.Rows.Cast<DataRow>().Where(r => r.ItemArray[1] != Name).CopyToDataTable(); 
newDt.Merge(dt); 
+0

James將根據「PName」作爲asc/desc進行排序。請檢查問題 –

+0

你能告訴我所需的輸出嗎? – James

+0

更新了想要的o/p的問題 –