C#のDataTableの構造を複製するCloneメソッド

C#にはデータベースから取得したデータをメモリ上に格納する為の「System.Data.DataTable」クラスがあります。

DataTableクラスはとても柔軟に構造を定義して値を格納する事ができるクラスです。

 

DataTableクラスDataTableクラスは複数のカラムを自由に設計する事が出来ます。


DataTableの構造を複製する

DataTableクラスには複雑に設計されたカラムなどの構造を複製する為のCloneメソッドが用意されています。

同じ構造が必要になった場合は、Cloneメソッドを使って新たなオブジェクトを作成する事が出来ます。

            //複製元のDataTableを作成
            var dtab = new DataTable("Table1");
            var fld1 = new DataColumn("Field1", typeof(int));
            dtab.Columns.Add(fld1);
            var fld2 = new DataColumn("Field2", typeof(string));
            dtab.Columns.Add(fld2);

            var row1 = dtab.NewRow();
            row1["Field1"] = 1;
            row1["Field2"] = "壱";
            dtab.Rows.Add(row1);
            var row2 = dtab.NewRow();
            row2["Field1"] = 2;
            row2["Field2"] = "弐";
            dtab.Rows.Add(row2);

            Console.WriteLine("フィールド数:" + dtab.Columns.Count);      // Columnsは2個
            Console.WriteLine("レコード数  :" + dtab.Rows.Count);         // Rowsは2個


            //複製したオブジェクトを作成
            var cloneTab = dtab.Clone();
            Console.WriteLine("フィールド数:" + cloneTab.Columns.Count); // Columnsは2個
            Console.WriteLine("レコード数  :" + cloneTab.Rows.Count);    // Rowsは0個!

Cloneメソッドではデータは複製されない

Cloneメソッドが複製するのは構造のみでデータの値は複製されません。

データも含めて複製したい場合は Copyメソッドを使いましょう。