2017-06-22 9 views
0

現在、DataTableにデータが設定されていますが、使用する前に2つの列に基づいて並べ替える必要があります。私はオンライン調査を持っている、とdt.DefaultView.SortまたはLINQを試みたが、私はそれが仕事を得ることができませんでした2つの列に基づいてDataTableを並べ替えます

Date | Serial Number 
22/06/2017 |  2 
20/06/2017 |  1 
22/06/2017 |  1 
20/06/2017 |  2 

:ここ

は私のDataTableが

のDataTable dtがどのように見えるかです。私は、これらの次のことを試してみました:

dt.DefaultView.Sort = "Date, Serial Number"; 

DataTable newDt = dt.AsEnumerable().OrderBy(r => r.Field<DateTime>("Date")) 
.ThenBy(r => r.Field<int>("Serial Number")).CopyToDataTable(); 

私は上記の方法の両方を試してみましたが、私が戻った結果はソートが1列のみ、例えばに基づいていたということでした。

Date | Serial Number 
22/06/2017 |  2 
22/06/2017 |  1 
20/06/2017 |  1 
20/06/2017 |  2 

しかし、それはでした私が望んでいたものではない。

Date | Serial Number 
20/06/2017 |  1 
20/06/2017 |  2 
22/06/2017 |  1 
22/06/2017 |  2 

は、私は、このような方法でのDataTableをソートする操作を実行するためにどのような方法があるかどう知っている可能性があります。以下は

期待される結果、私が望んでいるのですか?ありがとうございました。

+0

あなたが試したコードを共有することを中止するにはどうすればよいですか? –

+0

@ChetanRanpariya何も私を共有するのを止めない。私はちょうどポイントにまっすぐに行きたいと思った。あなたがちょうど尋ねることができるなら、私は共有することができます – Alvin

+0

あなたが何を試したのか、そしてどこが間違っているのか分からなければ、何が問題なのか解明するのは簡単ではありません。コードを共有することができれば助かります。 –

答えて

1

LINQでは、あなたが使用する

XXX.OrdyBy(o => o.Field1).ThenBy(o => o.Field2) 
+0

私はポストを更新しました、見てください。とにかくありがとう! – Alvin

3

次のコードは、私のために働くように見えます。

using System.Data; 

namespace ConsoleApplication1 
{ 
class Program 
{ 
    static DataTable Dt; 
    static void Main(string[] args) 
    { 
     Dt = new DataTable(); 
     Dt.Columns.Add(new DataColumn("date", typeof(DateTime))); 
     Dt.Columns.Add(new DataColumn("Serial Number", typeof(int))); 

     AddRow(Dt.NewRow(), new DateTime(2017, 06, 22), 2); 

     AddRow(Dt.NewRow(), new DateTime(2017, 06, 22), 1); 
     AddRow(Dt.NewRow(), new DateTime(2017, 06, 20), 2); 
     AddRow(Dt.NewRow(), new DateTime(2017, 06, 20), 1); 
     foreach(DataRow dr in Dt.Rows) 
     { 
      Console.WriteLine(string.Format("{0}\t{1}", dr[0], dr[1])); 
     } 
     DataView dv = Dt.DefaultView; 
     dv.Sort = "date, Serial Number"; 
     foreach(DataRow dr in dv.ToTable().Rows) 
     { 
      Console.WriteLine(string.Format("{0}\t{1}", dr[0], dr[1])); 
     } 
     Console.ReadKey(); 
    } 

    static void AddRow(DataRow dr, DateTime dt, int serialNumber) 
    { 
     dr[0] = dt; 
     dr[1] = serialNumber; 
     Dt.Rows.Add(dr); 
    } 
} 
} 
関連する問題