2016-10-19 3 views
0

から私は人々がコンボボックスにロードされた項目の値を取得するために、あなたは移入コンボボックスデータベースのクエリ

combobox1.displayMamer ="" 
    combobox1.valuemember="" 
    combobox1.datasource="" 

を使用する必要がある。しかし、このようなものはないと言っている同様の質問に対する回答の多くを参照してください仕事.....ここ

は、私が表からCODE1とCODE2を選択しています....私が持っているもの

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    Using con As New SqlConnection(sConnection) 
     con.Open() 
     Using com As New SqlCommand("Select Code1, Code2 from tblTable6 where fldname ='Things'", con) 
      Using rdr = com.ExecuteReader 
       If rdr.HasRows Then 
        Do While rdr.Read = True 
         ComboBox1.Items.Add(rdr.GetString(0)) 
         ''''missing something here 
        Loop 
        con.Close() 
       End If 
      End Using 
     End Using 
    End Using 
End Sub 

ですが、私はCODE1を表示できるようにしたいと、選択したときに、私が欲しいですthを持つことができるようにするe Code2の値ですが、displayMemberとValueMemberを使用しても結果は表示されません。

編集:ここではすべての私のコードです:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 

    Using con As New SqlConnection(sConnection) 

     Using com As New SqlCommand("Select Label, Code from Table.....", con) 
      con.Open() 
      Dim dt As New DataTable() 
      Dim rows = dt.Load(com.ExecuteReader) 
      ComboBox1.DataSource = dt 
      ComboBox1.DisplayMember = "Code" 
      ComboBox1.ValueMember = "Label" 
      con.Close() 
     End Using 
    End Using 

End Sub 

薄暗い行= dt.Load(com.ExecuteReader)---この行は

ERRORを強調します氏は述べています:Expressionが値

を生成しません。

EDIT2:新しいVにバインドすることはできません:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 

    Using con As New SqlConnection(sConnection) 
     con.Open() 
     Using com As New SqlCommand("Select Label, Code from tblData where fldname ='M'", con) 

      Dim dt As New DataTable() 
      ComboBox1.DataSource = dt 
      ComboBox1.DisplayMember = "Code" 
      ComboBox1.ValueMember = "Label" 
      con.Close() 
     End Using 
    End Using 

End Sub 

は、今私がいることを言って、別のエラーが出ますメンバー。 これはcombobox1.valuemember =「ラベル」

+1

HasRowsチェックは必要ありません。 'Do While rdr.Read'は、行がない場合にループをスキップします。 – LarsTech

+0

あなたの実際のSQLカラム、テーブル名WHERE句などを使用するように変更します。私はデータについてわからないので、より一般的な解決策を提示するように変更しました。 – Plutonix

+0

@plutonix - 私はSQL文を変更しました。私はここにそれを貼り付けた – BobSki

答えて

4

ではなくアイテムのコレクションを移入に起こる、あなたはDatasourceとして使用するコントロールにDataTableをバインドすることができます。

Using con As New SqlConnection(sConnection) 
    Using com As New SqlCommand("Select Id, Name FROM ....", con) 
     con.Open() 

     Dim dt As New DataTable() 
     dt.Load(com.ExecuteReader) 
     cbox1.Datasource = dt 
     cbox.DisplayMember = "Name" 
     cbox.ValueMember = "Id" 
    End Using 
End Using 

「名前」と「ID」データベーステーブルから列名を次のようになります。その後、あなたは選択があるときに提出すると、その値を表示するには、どの要素にそれを伝えることができます。この場合に使用する予定のイベントは、SelectedValueChangedおよびSelectedValueで、選択したアイテムに関連するIDを保持します。これはObjectとして返されるので、それを何でも元に戻す必要があります。

同じ方法でList(Of T)コレクションにバインドすることもできます。その場合、SelectedItemはオブジェクト全体になる可能性があります。たとえば、List(of Employee)SelectedItemを使用すると、ユーザーが選択した従業員のオブジェクトになります。

+0

私はデータがあるかどうかをチェックしませんか?またはループスルー? – BobSki

+1

関連するデータがないときにアプリが何かをする必要がない限り、必要はありません。行が 'dt.Load'から0の場合、一致する行はありません。 – Plutonix