同じ「.NET」利用でも、構文の書き方が若干違うので戸惑う。
【目的】作成した DataTable へ、新しいカラム(列)を追加する。
以下のコードについて:
自作関数にて取得した DataTable (コード内:dtGetData)から、新しい DataTable (コード内:dtSetTable )へデータをコピーすることが目的のコードの一部。
上記にあたり、列名も同じくコピーしようってトコロ。
※コードに登場する Get_DataTbl() は自作関数。返り値はDataTable。
ここではこの関数の詳細は記載しない。
DataTable dtGetData = new DataTable();
DataTable dtSetTable = new DataTable();
// DataTable 取得&保持。
dtGetData = Get_DataTbl();
// 列(名)設定。
dtSetTable.Columns.Add("年月"); // 一つ目のカラムを設定
foreach (DataColumn Col in dtGetData.Columns)
{
// ↓駄目なやり方。(最初にかいたコード)
//string strCol = Col.ToString();
//dtSetTable.Columns.Add(strCol);
// ↓MSDNに載っていた方法。
DataColumn dtCol = new DataColumn(Col.ColumnName); // 新しいDataColumnを作成し、カラム名を設定する
dtCol.DataType = System.Type.GetType("System.Int32"); // 作成したDataColumnの型を設定する
dtSetTable.Columns.Add(dtCol); // 作成したDataColumnを、テーブルに追加する
Console.WriteLine("[Debug--ColumnName]" + dtCol.ColumnName); // デバッグ出力(カラム名)
}
●補足
「駄目なやり方」の方法だと、列名は設定できるけど、型の設定ができない。
型の設定はなくてもいいときは、一応これでも動くことは動く。
※でも色々間違ってる。
・文字列型で宣言しているし、
・カラム名の取得を「.ToString()」で無理やりしてる。
ただ、今回どうしても型を設定したかった。
ここにコードは載せていないが、上記コードを含むプログラムで行っている内容が
1.取得した DataTable『dtGetData』から、
新しい DataTable 『dtSetTable』へデータをコピーする処理を12回繰り返し、
2.dtSetTable に溜めたデータを列毎に集計して「総合計」として最終行に追加する。
というもので、この集計の際に【DataTable.Compute メソッド】を使いたかったのよ。
【.Compute メソッド】さん、便利関数。Sum() とかCount() とか Max() とか、手軽にやってくれる。
あ、これもメモっとこう。次で。
0 件のコメント:
コメントを投稿