0

我想问如何获取组合框的选定值,然后将其显示到多个文本框。组合框填充了数据库中的疾病。现在,当从组合框中选择一种疾病时,该疾病的症状应该显示在许多文本框中。目前我有 10 个用于症状的文本框。表结构是 id、disease、symbols。这是我的代码:

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 个症状,然后文本框symp0symp3一一显示症状,其余文本框留空。

The problem is that when an illness is selected, those textboxes displays only the last symptom of that illness stored in the database.

例如:发烧。在表中,它有4个症状:感冒、发热、头痛、头晕。如果选择发烧,则仅从symp0symp9文本框显示头晕。

4

1 回答 1

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来使用 a symptoms。您的代码变得更加紧凑:

Dim symptoms As New List(Of String)
While dtr.Read()
  symptoms.Add(dtr("symptoms"))     
End While
YourListBoxWithSymptoms.DataSource = symptoms
于 2013-02-14T02:05:20.267 回答