クエリの結果セットを読み取るときは、ご存知のようにループを使用します。
While dr.Read
' run this for every row in your resultset
...
End While
While
すべての行を読み取るまで、ループは続行されます。
ループを使用する必要はありません。必要に応じて、次のように一度に1行ずつ読み取ることができます
If dr.Read
' just the first row
End If
If dr.Read
' just the second row
End If
If dr.Read
' just the third row
End If
...
あなたの質問から、あなたはTextbox1
を持っていると思います 、Textbox2
、... Textbox5
あなたのフォームに。 Grade1
もあると思います 、Grade2
....
件名と成績の両方を処理するには、クエリの最初の行を
に変更します。 sql = "SELECT subject_name, grade " & _
これらのアイテムは次のように入力できます:
If dr.Read
TextBox1.Text = dr.Item("subject_name").ToString
Grade1.Text = dr.Item("grade").ToString
End If
If dr.Read
TextBox2.Text = dr.Item("subject_name").ToString
Grade2.Text = dr.Item("grade").ToString
End If
If dr.Read
TextBox3.Text = dr.Item("subject_name").ToString
Grade3.Text = dr.Item("grade").ToString
End If
' more of these sets of four lines to fill your whole form.
これはあなたの問題を解決します。しかし、あなたはおそらくそれがばかげて繰り返されていることに気付くでしょう。本当に必要なのは、テキストボックスの配列(実際には2つの配列)です。プログラムでこれらのtexboxを作成し、入力します。 私はこれをデバッグしていません:それはあなたがするためです。
Dim Subjects As Textbox()
Dim Grades As Textbox()
...
Dim rownumber, Y
rownumber = 0
Y = 200
Dim Subject
Dim Grade
While dr.Read
Subject = New Textbox
Subject.Text = dr.Item("subject_name").ToString
Subject.Width = 200
Subject.Height = 40
Subject.X = 175
Subject.Y = Y
Subjects(rownumber) = Subject
Form.Controls.Add(Subject)
Grade = New Textbox
Grade.Text = dr.Item("grade").ToString
Grade.Width = 50
Grade.Height = 40
Grade.X = 400
Grade.Y = Y
Grades(rownumber) = Grade
Form.Controls.Add(Grade)
rownumber = rownumber + 1
Y = Y + 50
End While
これを実行すると、サブジェクトごとに1つずつ、2列のコントロールが表示されます。ただし、このコードは複雑であり、フォームのすべてのレイアウトをSomething.Y = value
で行う必要があります。 次に、Y = Y + 50
算術。
そのため、グリッドコントロールが存在します。彼らはそのようなことを世話します。