När du läser en frågas resultatuppsättning använder du som du vet en loop.
While dr.Read
' run this for every row in your resultset
...
End While
While
loop fortsätter tills du har läst alla rader.
Du behöver inte använda en slinga. Om du vill kan du läsa raderna en i taget, så här
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
...
Från din fråga antar jag att du har Textbox1
, Textbox2
, ... Textbox5
på ditt formulär. Jag antar också att du har Grade1
, Grade2
....
För att hantera både ämnesnamn och betyg, ändra den första raden i din fråga till
sql = "SELECT subject_name, grade " & _
Du kan fylla i dessa objekt så här:
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.
Detta löser ditt problem. Men du märker förmodligen att det är absurt repetitivt. Vad du verkligen behöver är en array (faktiskt två arrayer) av textrutor. Du skapar, och fyller sedan i, dessa textrutor i ditt program. Jag har inte felsökt detta:det är för dig att göra det.
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
När detta körs kommer du att ha två kolumner med kontroller, en för varje ämne. Men den här koden är komplex, och du måste göra all layout av ditt formulär med Something.Y = value
och sedan Y = Y + 50
aritmetisk.
Det är därför rutnätskontroller finns. De tar hand om sånt.