【问题标题】:vb2008 retrieve value from combobox selected item and display to multiple textboxesvb2008 从组合框选定项中检索值并显示到多个文本框
【发布时间】:2013-02-14 10:19:18
【问题描述】:

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

【问题讨论】:

  • 你真的需要重新考虑你的设计,如果你必须多次编写这样的代码:sympX.Text,其中X=0:1:9(0 到 9)。
  • @Neolisk - 对不起,先生,我只是一个新手,还在学习..我不明白你的意思。我将如何使用“sympX.Text,其中X=0:1:9(0 到 9)”?..你的意思是我应该用sympX.Text 替换那些symp0.Textsymp9.Text 并将x 声明为整数,然后写@ 987654333@?
  • 这意味着在您开始使用数据库之前,您至少应该拥有一个包含 10 个元素的文本框数组。然后,您将有一个循环来遍历所有这些,并且只有一个赋值操作。您的代码变得干净且易于阅读/维护。另请阅读我的答案 - 太大而无法发表评论。

标签: vb.net combobox textbox


【解决方案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 个。对于任意数量的症状,您可以通过将DataSource 设置为symptoms 来使用ListBox。您的代码变得更加紧凑:

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

【讨论】:

  • 耶!!它现在可以工作了,先生:D 我使用了文本框,因为该表单用于更新或在数据库中插入记录。一百万谢谢你,先生。上帝的速度:)
  • @VBeginner:如果您还有添加/删除按钮,您可以使用 ListBox 来更新和插入记录。附带说明一下,如果答案有帮助,您也可以投票。
  • @Neolisk:昨天我没能投票赞成你的回答,因为我上次上网时我的声望在 15 岁以下,呵呵,无论如何谢谢你提醒我先生 :)
  • 无论如何,如果您不介意先生,我可以再问一个关于我上面的帖子的问题吗?..或者我应该发一个新帖子吗?我只是想问我如何更新它?我不知道该怎么做。
  • @VBeginner:一般来说,接受答案后,最好创建一个新问题。否则,如果您更改问题的含义,并且答案变得不适用,它可能看起来很奇怪。尽管您可以在其他问题中引用此问题。如果它可以帮助您解释问题,请这样做。编辑您的问题就像点击标签下的 edit 一样简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
相关资源
最近更新 更多