タグ別アーカイブ: C#

DataTable間の操作について

今回はC#で開発した際の話です。

あるDataTableから必要なフィールドのみを選択し、
新規のDataTableを作る必要が有りました。

そこで、今回は以下の様に対応しました。

元となるDataTable:table1
必要なフィールドのみを持つ新規DataTable:table2
必要なフィールドのインデックス:0,1,3,4,7


// 必要なフィールドの列名を配列化します。
string[] requiredColumns = {dt.Columns[0].ToString(),
                            dt.Columns[1].ToString(),
                            dt.Columns[3].ToString(),
                            dt.Columns[4].ToString(),
                            dt.Columns[5].ToString(),
                           };

// 元のテーブルから必要なフィールドのみを抽出して、テーブルを新規作成します。
System.Data.DataTable table2 = table1.DefaultView.ToTable(true, requiredColumns);

ToTableの最初の引数は、重複する行を含むかどうかをBool値で指定します。
Trueなら重複しない行のみ格納され、Falseでは重複する行も格納されます。
二つ目の引数は、抽出する列名を指定します。
ここでは、事前に配列化しておいた変数をセットしました。

場合によっては、新規作成したテーブルの構造と値をそのまま別のテーブルで使用したい場合には、
以下の様に行います。


// table2の構造と値をtable3へコピーします。
System.Data.DataTable table3 = table2.Copy();

//table2の構造のみをtable4へコピーします。
System.Data.DataTable table4 = table2.Clone();

Cloneは構造のみをコピーするので、
table2と同じ構造を持ち、値は異なる、といったデータの保持が可能になります。

また、元のテーブルと同じ構造を持ち、元のテーブル特定行のみを移したい場合、
ImportRow()メソッドを使用します。


System.Data.DataTable table4 = table2.Clone();
table4.ImportRow(table2.Rows[0]);

とすることで、table2の1行目のデータをtable4へインポートできます。