DataTableに行を追加するには


おも  2007-10-28 10:09:12  No: 137977

ArrayListからDataTableにデータを入れる方法がわかりません・・・。かれこれ1週間ほど探した気がしますが、空の行を追加して項目を一つ一つ代入していく方法が見つけられません。

例えば配列やコレクションでしたら、

For Each str As String In csvArrayList
  testArrayList.add(str)
Next
  
For i As Integer = 0 To Array.Length-1
  testArray(i) = str
Next

というふうにデータを渡せますが、DataTableはどのようにデータを入れていけばいいでしょうか。とりあえずこのようにやってみましが・・・。

'まずDataTableのインスタンスを作成
Dim DT As New DataTable
'カラムを追加
DT.Columns.Add("F1")
DT.Columns.Add("F2")
DT.Columns.Add("F3")


For〜ループでコレクションの文字列を1つ1つ入れていくのですが、これではうまく行きませんでした。
For i As Integer = 0 To testArrayList.count()
  DT.Rows(i)("F1") = testArrayList(i)
  DT.Rows(i)("F2") = testArrayList(i)
  DT.Rows(i)("F3") = testArrayList(i)
Next
例外は出ませんでしたが、iがセルの中に入って変な表になってしまいます。

このようにRowのインスタンスを作るということですが、
Dim r As DataRow = DT.NewRow()

これをループで複数作るには、どう記述したらいいでしょうか。また追加されたRowの各セルに値を追加していくにはどうしたらいいでしょうか。
すでにある別のDataTableに値を追加しようとして、
DT2.Rows("値")("項目名")
はReadOnlyということで追加できませんでした。

とりあえず、追加方法を具体的にアドバイス頂きたいです。それから、DataTableの扱い方をいくら検索しても初心者にわかりやすい情報は見つけられませんでしたが、どこで調べればよかったのでしょうか。参考書も4冊ほど読みましたが・・・。


魔界の仮面弁士  2007-10-28 10:56:02  No: 137978

> ArrayListからDataTableにデータを入れる方法がわかりません・・・。
ArrayList に何を格納しているのかが書かれていないので、答えようが無いです。

> DataTableはどのようにデータを入れていけばいいでしょうか。
行追加なら、
  table.Rows.Add( DataRow ) 
または
  table.Rows.Add(列値1, 列値2, ……)
の構文ですね。
型付きDataSetを利用している場合は、table.AddXXXXRow() メソッドも使えます。

> このようにRowのインスタンスを作るということですが、
> Dim r As DataRow = DT.NewRow()
これは作っただけなので、DataTable には追加されません。
作ったインスタンスを、.Rows.Add の引数に渡す必要があります。

> これをループで複数作るには、どう記述したらいいでしょうか。
> また追加されたRowの各セルに値を追加していくには
幾つか書き方はありますが、例えば、
  For……
    Dim newRow As DataRow = DT.NewRow()
    newRow(列1) = 値1
    newRow(列2) = 値2
      :
      :
    DT.Rows.Add(newRow)
  Next
という感じで。
# あるいは ItemArray プロパティを使う方法も。


おも  2007-10-28 19:41:15  No: 137979

>魔界の仮面弁士様
ありがとうございます!

  For……
    Dim newRow As DataRow = DT.NewRow()
    newRow(列1) = 値1
    newRow(列2) = 値2
      :
      :
    DT.Rows.Add(newRow)
  Next

この方法でやっとのことで追加できるようになりました!!
ちなみにセルの内容は文字列でした。別に質問いたしましたように、CSVファイルをネストしたコレクションに入れ、さらにデータテーブルに渡しました。

どうもありがとうございました<(_ _)>


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加