datatableへのデータ挿入

解決


marllbolo  2012-05-28 18:51:47  No: 143318  IP: 192.*.*.*

VB2010と使っております。

本日二度目ですみません。

5列10行のdatatableがあります。その中で5列目は何も入っておらず、新しくデータを1行目から10行目までデータを入れようと考えています。

ループ処理でデータを入れることになるのとおもうのですが、どのように記述をすればよろしいでしょうか。

基本的な内容とも思うのですが、googleで検索しても理解を得られるサイトが見つからなかったので再度お願いに参りました。

すみませんが、この処理ができないと今後VBをやっていく上で何かとてこずると思うのでしっかりと勉強しておきたいと思いました。宜しくお願いします。

編集 削除
魔界の仮面弁士  2012-05-29 09:45:15  No: 143319  IP: 192.*.*.*

とりあえず『Dim tbl As DataTable』があるとして、使い方をまとめてみました。

なお、型付DataSet(デザイン時に*.xsdファイルを作成)を使っている場合は、
そのテーブルに対して、上記よりもより適した書き方が用意されています。


'既存の行に値を書きこむ方法
tbl.Rows(行番号)(列) = 新しい値
tbl.Rows(行番号).SetField(Of 列の型)(列, 新しい値)
'※注:「列」の部分には、列名(String),列番号(Integer),DataColumn のいずれかを指定。

'既存の行から値を読み取る方法
Dim 最大行数 As Integer = tbl.Rows.Count
Dim 既知の値 As Object = tbl.Rows(行番号)(列)
Dim 既知の値 As 列の型 = tbl.Rows(行番号).Field(Of 列の型)(列)
Dim 既知の値 As 列の型? = tbl.Rows(行番号).Field(Of 列の型?)(列)
'※注:「?」付きの型(Decimal? や Date? など)を使った構文では、
'    値が DBNull だった場合、それが Nothing に置き換えられて返されます。


'値がDBNullかどうか判定する方法
If tbl.Rows(行番号).IsNull(列) Then
If IsDBNull(tbl.Rows(行番号)(列)) Then
If TypeOf tbl.Rows(行番号)(列) Is DBNull Then
If tbl.Rows(行番号).Field(Of 列の型?)(列) Is Nothing Then  '値型(Decimal等)の場合
If tbl.Rows(行番号).Field(Of 列の型)(列) Is Nothing Then   '参照型(String等)の場合
http://madia.world.coocan.jp/cgi-bin/vbnet/wwwlng.cgi?print+201205/12050010.txt


'新たに行を追加する方法  その1
Dim row As DataRow = tbl.NewRow()
row(列1) = 新しい値1
row(列2) = 新しい値2
row(列3) = 新しい値3
tbl.Rows.Add(row)

'新たに行を追加する方法  その2
tbl.Rows.Add(新しい値1, 新しい値2, 新しい値3)



この他、検索・並び替え・絞り込みなどのために、
DataView の使い方やLinq の使い方なども一緒に抑えておくと便利です。

編集 削除
marllbolo  2012-05-29 15:47:44  No: 143320  IP: 192.*.*.*

魔界の仮面弁士様

ご回答ありがとうございます。
いろんなケースを上げてもらって感謝です。
また、こんなに書き方があるんだと思ったら、これらの一行でかなりソースの量が減ります。

tbl.Rows(行番号)(列)
での書き方は列固定でループする形でよく使っていたのですが、

Dim 最大行数 As Integer = tbl.Rows.Count

は目からうろこです。

今までいちいちforeach で独自にカウントをつけてそれを使っていたのでこの一行で5行ほど減ります。確かにこの一行の書き方がスマートですよね。

あと、「?」をはじめてみました。これまで検索をしてきましたがこれが使ってあったサイトを見たことがなかったので。(自分が見逃していただけかもしれませんが。)

本当にいろいろケースを書いてくださってありがとうございます。

編集 削除
marllbolo  2012-05-30 12:30:54  No: 143321  IP: 192.*.*.*

解決チェックを忘れていました。

編集 削除