VB2008检索从组合框中选择的项目和显示多个文本框的值(vb2008 retrieve value

2019-11-01 13:32发布

我想问怎么走,然后组合框的选择值显示给多个文本框。 组合框填充了数据库的疾病。 现在,当从组合框中选择一种疾病,该疾病的症状,应显示在文本框很多。 目前我有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个表中的症状,然后symp0symp3文本框将显示症状逐一留下剩余的文本框为空。

问题是,当选择一种疾病,这些文本框只显示存储在数据库中的疾病的症状最后。

例如:发烧。 在该表中,它有4种症状:冷,热温度,头痛,头晕。 如果选择了发烧,头晕只有从显示symp0symp9文本框。

Answer 1:

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通过其设置DataSourcesymptoms 。 你的代码变得更紧凑:

Dim symptoms As New List(Of String)
While dtr.Read()
  symptoms.Add(dtr("symptoms"))     
End While
YourListBoxWithSymptoms.DataSource = symptoms


文章来源: vb2008 retrieve value from combobox selected item and display to multiple textboxes