Reputation: 21
I wanted to ask how to get combobox's selected value then display it to multiple textboxes. The combobox is populated with illnesses from the database. Now when an illness is selected from combobox, the symptoms of that illness should be displayed in many textboxes. Currently I have 10 textboxes for the symptoms. The table structure is id, illness, symptoms. Here's my code:
Dim mycmd As New MySqlCommand
Dim dtr As MySqlDataReader
Call Connect()
Dim str As String
str = "Select symptoms from diagnose where illness = @ill"
mycmd.Parameters.AddWithValue("ill", cmbRecord.Text)
mycmd.CommandText = str
dtr = mycmd.ExecuteReader
While dtr.Read()
symp0.Text = dtr("symptoms")
symp1.Text = dtr("symptoms")
symp2.Text = dtr("symptoms")
symp3.Text = dtr("symptoms")
symp4.Text = dtr("symptoms")
symp5.Text = dtr("symptoms")
symp6.Text = dtr("symptoms")
symp7.Text = dtr("symptoms")
symp8.Text = dtr("symptoms")
symp9.Text = dtr("symptoms")
End While
myConn.Close()
when an illness is selected from the combobox the symptoms should display on those textboxes. Say the selected illness has only 4 symptoms in the table, then symp0
to symp3
textbox will show the symptoms one by one and leaving the remaining textboxes blank.
The problem is that when an illness is selected, those textboxes displays only the last symptom of that illness stored in the database.
Example: fever. In the table, it has 4 symptoms: cold, hot temperature, headache, dizziness. If fever is selected, only dizziness is displayed from symp0
to symp9
textboxes.
Upvotes: 0
Views: 2213
Reputation: 26414
dtr("symptoms")
gets a value of column "symptoms"
from the current row. Between assignment to Textboxes #1 through #10 you do not advance reader to the next row, this is why you are seeing the same value in all textboxes.
Now to answer your question why it's the last symptom in all textboxes. By looping through rows with dtr.Read()
, you re-assign values of Textboxes every time, and it happens until the last one is assigned. At which point no subsequent assignments are made, so the last value remains on the screen.
What you are looking for is probably something like this:
Dim symptoms As New List(Of String)
While dtr.Read()
symptoms.Add(dtr("symptoms"))
End While
'set available symptoms
Dim arrayOfTextboxes() As TextBox = {symp0, ... put all textboxes here..., symp9}
Dim i As Integer = 0
For i = 0 To symptoms.Count - 1
arrayOfTextboxes(i).Text = symptoms(i)
Next
'clear other textboxes
For j = i to UBound(arrayOfTextboxes)
arrayOfTextboxes(j).Text = String.Empty
Next
This is assuming you have less than 10 symptoms to display. For any number of symptoms, you could have used a ListBox
by setting its DataSource
to symptoms
. Your code becomes more compact:
Dim symptoms As New List(Of String)
While dtr.Read()
symptoms.Add(dtr("symptoms"))
End While
YourListBoxWithSymptoms.DataSource = symptoms
Upvotes: 2