0

コンボボックスの選択された値を取得して複数のテキストボックスに表示する方法を尋ねたかったのです。コンボボックスには、データベースから病気が取り込まれます。コンボボックスから病気を選択すると、その病気の症状が多くのテキストボックスに表示されるようになりました。現在、症状用のテキストボックスが 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テキスト ボックスに症状が 1 つずつ表示され、残りのテキスト ボックスは空白のままになります。

問題は、病気を選択すると、データベースに保存されているその病気の最後の症状しかテキスト ボックスに表示されないことです。

例:発熱。表では、寒さ、暑さ、頭痛、めまいの4つの症状があります。発熱を選択するとめまいのみがテキストボックスに表示されsymp0ますsymp9

4

1 に答える 1

2

dtr("symptoms")"symptoms"現在の行からcolumn の値を取得します。テキストボックス #1 から #10 への割り当ての間に、リーダーを次の行に進めません。これが、すべてのテキストボックスに同じ値が表示される理由です。

なぜそれがすべてのテキストボックスの最後の症状なのかという質問に答えましょう。を使用して行をループするとdtr.Read()、毎回 Textbox の値が再割り当てされ、最後の値が割り当てられるまで発生します。この時点で後続の割り当ては行われないため、最後の値が画面に残ります。

あなたが探しているのは、おそらく次のようなものです。

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
于 2013-02-14T02:05:20.267 に答える