今回は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へインポートできます。