0

私はあなたがすべて元気であると信じています。何が間違っているのか、それを修正する方法を知りたいです。以下のコードの目的は、MySQL データベースにクエリを実行し、ComboBox 内にテーブルの 1 列を表示することです。次に、ComboBox でその値が選択されたら、関連付けられているすべてのレコードをフォームの他のコントロールに入力します (この部分について別の質問を作成します)。

現在、クエリは機能していますが、ComboBox には値が設定されていません。私は何を間違っていますか?助けてください、ありがとう。

ここに私のコードがあります:

    Private Sub RetrieveMySQLdata()

    Try
        Dim dbConn As New MySqlConnection
        Dim dbQuery As String = ""
        Dim dbCmd As New MySqlCommand
        Dim dbAdapter As New MySqlDataAdapter
        Dim dbTable As New DataTable
        If dbConn.State = ConnectionState.Closed Then
            dbConn.ConnectionString = String.Format("Server={0};Port={1};Uid={2};Password={3};Database=accounting", FormLogin.ComboBoxServerIP.SelectedItem, My.Settings.DB_Port, My.Settings.DB_UserID, My.Settings.DB_Password)
            dbConn.Open()
        End If

        dbQuery = "SELECT *" & _
                   "FROM cc_master INNER JOIN customer ON customer.accountNumber = cc_master.customer_accountNumber " & _
                   "WHERE customer.accountNumber = '" & TextBoxAccount.Text & "'"
        With dbCmd
            .CommandText = dbQuery
            .Connection = dbConn
        End With
        With dbAdapter
            .SelectCommand = dbCmd
            .Fill(dbtable)
        End With
        Dim i As Integer
        For i = 0 To dbTable.Rows.Count - 1
            ComboBoxCard.ValueMember = "ccNumber"

        Next
    Catch ex As Exception
        MessageBox.Show("A DATABASE ERROR HAS OCCURED" & vbCrLf & vbCrLf & ex.Message & vbCrLf & _
                    vbCrLf + "Please report this to the IT/Systems Helpdesk at Ext 131.")
    End Try

End Sub
4

2 に答える 2

2

どこに入力しようとしていComboBoxますか? 私が見る唯一の相互作用はここにあります:

For i = 0 To dbTable.Rows.Count - 1
    ComboBoxCard.ValueMember = "ccNumber"
Next

私が推測しているのは、あなたが思っていることをしていないということです。たとえばValueMember、ループ内で同じ値を複数回設定しています。ループの反復ごとにステートメント内の何も変更されないのに、なぜループするのでしょうか?

より具体的にValueMemberは、実際には表示される値ではありません。 バインドされたデータのどのフィールドに値を含める必要があるかを示すために使用されますDataSourceこれは、欠落しているコントロールにを提供するときに使用されます。

DataSourceは であるべきだと思いますdbTableので、おそらく次のようなことをしようとしているでしょう:

ComboBoxCard.DataSource = dbTable
ComboBoxCard.ValueMember = "ccNumber"
ComboBoxCard.DisplayMember = "Some Other Field in the database"

これらのステートメントの後にコントロールを明示的に呼び出す必要があるかどうかは覚えていません.DataBind()が、リンク先の例ではそれを行っていないため、省略します。

コードで本質的にやろうとComboBoxしていることは、結果をループして. これを行う必要はありません。は、使用されているデータのセットを指定し、そのセットで使用する必要があるフィールドを指定するComboBoxだけで、これを内部的に行うことができます。DataSourceこれはデータ バインディングと呼ばれます。

于 2012-09-30T12:39:22.053 に答える
1

DataSourceComboBox オブジェクトの を設定していないようです。このコードの代わりに:

Dim i As Integer
For i = 0 To dbTable.Rows.Count - 1
    ComboBoxCard.ValueMember = "ccNumber"
Next

次のコードのようなものを使用します。

ComboBoxCard.DataSource = dbTable
ComboBoxCard.ValueMember = "ccNumber"
ComboBoxCard.DisplayMember = "(some other column if you want)"
于 2012-09-30T12:38:52.537 に答える