我想询问如何获取组合框的选定值,然后将其显示到多个文本框中。组合框中充满了来自数据库的疾病。现在,当从组合框中选择疾病时,该疾病的症状应该显示在许多文本框中。目前我有10个症状的文本框。表结构是id,疾病,症状。这是我的代码:
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()
当从组合框中选择疾病时,症状应显示在那些文本框上。假设所选疾病在表格中只有4种症状,则symp0
至symp3
文本框将逐一显示症状,并将剩余的文本框留空。
问题在于,当选择疾病时,这些文本框仅显示存储在数据库中的该疾病的最后症状。
例子:发烧。在表中,它有4个症状:冷,热的温度,头痛,头晕。如果选择了发烧,则只会从symp0
到symp9
文本框显示头晕。
答案 0 :(得分:2)
dtr("symptoms")
从当前行获取列"symptoms"
的值。在分配到文本框#1到#10之间,您不会将阅读器推进到下一行,这就是您在所有文本框中看到相同值的原因。
现在回答您的问题,为什么它在所有文本框中都是最后一个症状。通过使用dtr.Read()
循环遍历行,每次都会重新分配文本框的值,直到最后一个分配为止。此时没有进行后续分配,因此最后一个值保留在屏幕上。
您正在寻找的东西可能是这样的:
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
假设您显示的症状少于10个。对于任意数量的症状,您可以通过将ListBox
设置为DataSource
来使用symptoms
。你的代码变得更紧凑:
Dim symptoms As New List(Of String)
While dtr.Read()
symptoms.Add(dtr("symptoms"))
End While
YourListBoxWithSymptoms.DataSource = symptoms