Quando leggi il set di risultati di una query, usi un ciclo come sai.
While dr.Read
' run this for every row in your resultset
...
End While
Il While
il ciclo continua finché non hai letto tutte le righe.
Non è necessario utilizzare un loop. Se lo desideri puoi leggere le righe una alla volta, in questo modo
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
...
Dalla tua domanda suppongo che tu abbia Textbox1
, Textbox2
, ... Textbox5
sul tuo modulo. Immagino che tu abbia anche Grade1
, Grade2
....
Per gestire sia il nome della materia che il voto, cambia la prima riga della tua query in
sql = "SELECT subject_name, grade " & _
Puoi popolare questi elementi in questo modo:
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.
Questo risolve il tuo problema. Ma probabilmente noterai che è assurdamente ripetitivo. Ciò di cui hai veramente bisogno è un array (in realtà due array) di caselle di testo. Crei e poi riempi queste texbox nel tuo programma. Non ho eseguito il debug di questo:è per te farlo.
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
Quando viene eseguito, avrai due colonne di controlli, una per ogni argomento. Ma questo codice è complesso e devi fare tutto il layout del tuo modulo con Something.Y = value
e poi Y = Y + 50
aritmetica.
Ecco perché esistono i controlli della griglia. Si occupano di questo genere di cose.