Vb.net vb2008从组合框中检索选定项的值并显示到多个文本框

Vb.net vb2008从组合框中检索选定项的值并显示到多个文本框,vb.net,combobox,textbox,Vb.net,Combobox,Textbox,我想询问如何获取combobox的选定值,然后将其显示到多个文本框中。组合框中填充了数据库中的疾病。现在,当从组合框中选择一种疾病时,该疾病的症状应该显示在许多文本框中。目前我有10个症状文本框。表的结构是id、疾病、症状。这是我的密码: Dim mycmd As New MySqlCommand Dim dtr As MySqlDataReader Call Connect() Dim str As String str = "Select symptoms f

我想询问如何获取combobox的选定值,然后将其显示到多个文本框中。组合框中填充了数据库中的疾病。现在,当从组合框中选择一种疾病时,该疾病的症状应该显示在许多文本框中。目前我有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
文本框中只显示眩晕。

dtr(“症状”)
从当前行获取列
“症状”
的值。在分配到文本框#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个。对于任何数量的症状,您都可以通过将其
数据源设置为
症状来使用
列表框
。您的代码变得更加紧凑:

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

如果你必须多次编写这样的代码,你就必须重新考虑你的设计:
sympX.Text
,其中
X=0:1:9
(0到9)。@neolick-对不起,先生,我只是一个新手,还在学习……我不明白你的意思。我将如何使用“
sympX.Text
,其中
X=0:1:9
(0到9)”?…你的意思是我应该用
sympX.Text
替换那些
sympX.Text
,并声明一个X为整数,然后写
X=0:1:9
?这意味着你至少应该有一个包含10个元素的文本框数组,在你开始使用数据库之前。然后,您将有一个循环来迭代所有这些操作,并且只有一个赋值操作。您的代码变得干净,易于阅读/维护。也请阅读我的答案-太大了,无法发表评论。耶!!现在可以用了,先生:我使用文本框,因为表单是用来更新或在数据库中插入记录的。非常感谢你,先生。God speed:)@VBeginner:如果您还有添加/删除按钮,您可以使用列表框来更新和插入记录。顺便说一句,如果答案有帮助,你也可以提高投票。@Neolik:我昨天没能提高你的投票率,因为我上次上网的时候我的名声还不到15岁,呵呵,无论如何,谢谢你提醒我,先生:)无论如何,如果你不介意的话,先生,我可以就我上面的帖子再问一个问题吗?或者我应该写一个新帖子吗?,我只是想问我如何更新它?我不知道怎么做。@VBeginner:一般来说,在接受了答案后,最好是提出一个新问题。否则,如果你改变了问题的意思,答案变得不适用,它可能看起来很奇怪。虽然你可以在其他问题中提到这个问题。如果这有助于你解释问题,就这样做。编辑问题与单击标记下的“编辑”一样简单。