トップ回答者
データテーブル間のデータ反映について

質問
-
WindowsXP
VB2005EE
質問させて頂きます。よろしくお願いします。
現在、Mainデータグリッドビュー(Mainテーブルとデータバインディングされています。)とSubMainデータグリッドビュー(SubMainテーブルとデータバインディングされています。) がwindowsフォームに各々配置されており、SubMainデータグリッドビューは入力用として使用しています。入力後、配置されたボタンにて下記ソースを実行するようにしてあります。
内容としては、SubMainテーブルの編集後データをMainテーブルに新規追加するというものです。
そこで質問があります。下記コードにてMainテーブルに反映させることは可能なのですが、なぜかSubMainテーブルの1行目のデータ(SubMainTbl.Rows(0))だけが反映されていないようなんです。しかし、2回目以降に下記コードを実行すると全てのフィールドが反映されています。この症状はどういうことなのでしょうか?そして、防ぐ手だてはあるのでしょうか?
Dim MainTbl As DataTable = Me.WaterQuality_MainDataSet.Tables("Main")
Dim SubMainTbl As DataTable = Me.WaterQuality_MainDataSet.Tables("SubMain")
Dim LastRow As Integer = SubMainTbl.Rows.Count + 1Try
Dim i As Integer'サブメインデータグリッドビューの頭行を選択しなければ、メインに反映されない
Me.SubMainDataGridView.CurrentCell = Me.SubMainDataGridView(0, 0)For i = 1 To LastRow
Dim dr As DataRow = MainTbl.NewRow()
dr("Date") = SubMainTbl.Rows(i - 1)(1)
dr("TitenCode") = SubMainTbl.Rows(i - 1)(2)
dr("EmpID") = SubMainTbl.Rows(i - 1)(3)
dr("WaterNum") = SubMainTbl.Rows(i - 1)(4)
dr("Value") = SubMainTbl.Rows(i - 1)(5)MainTbl.Rows.Add(dr)
Next iMe.TextBox2.Text = Me.MainDataGridView.RowCount
Catch ex As ExceptionEnd Try
回答
-
まずCatch句を空にして例外を無視するのは止めましょう。おかしなことが発生していてもアプリケーションは結果的に無視することになってしまいます。実際、提示されたコードを見ると、Forで回す回数が一つ多く、存在しないSubMainTblの行を読もうとして、例外が発生していると思います。
みやり さんからの引用
なぜかSubMainテーブルの1行目のデータ(SubMainTbl.Rows(0))だけが反映されていないようなんです。しかし、2回目以降に下記コードを実行すると全てのフィールドが反映されています。ここの意味がはっきりわからないのですが、「全てのフィールド」というのは「全てのレコード」の間違いでしょうか?
また、DataGridViewのRowCountは、DataGridViewの新規レコードのカウントも入ります。例えばデータテーブルに2つのレコードが存在し、そのデータテーブルがDataGridViewにバインドしていれば、データテーブルのRows.Countは2で、DataGridViewのRowCountは3になります。この辺りの勘違いはありませんでしょうか?
すべての返信
-
まずCatch句を空にして例外を無視するのは止めましょう。おかしなことが発生していてもアプリケーションは結果的に無視することになってしまいます。実際、提示されたコードを見ると、Forで回す回数が一つ多く、存在しないSubMainTblの行を読もうとして、例外が発生していると思います。
みやり さんからの引用
なぜかSubMainテーブルの1行目のデータ(SubMainTbl.Rows(0))だけが反映されていないようなんです。しかし、2回目以降に下記コードを実行すると全てのフィールドが反映されています。ここの意味がはっきりわからないのですが、「全てのフィールド」というのは「全てのレコード」の間違いでしょうか?
また、DataGridViewのRowCountは、DataGridViewの新規レコードのカウントも入ります。例えばデータテーブルに2つのレコードが存在し、そのデータテーブルがDataGridViewにバインドしていれば、データテーブルのRows.Countは2で、DataGridViewのRowCountは3になります。この辺りの勘違いはありませんでしょうか?