从数据库查询填充ComboBox

时间:2016-10-19 19:22:30

标签: .net vb.net data-binding combobox

我看到类似问题的许多答案,人们在说,为了获得在组合框中加载的项目的价值,你需要使用

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

但是这些东西不起作用.....

这是我的......

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和Code2,我希望能够显示code1,当我选择时,我希望能够获得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

Dim rows = dt.Load(com.ExecuteReader)---这一行加下划线

错误说:表达不会产生价值

EDIT2:

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 =" Label"

1 个答案:

答案 0 :(得分:4)

您可以将DataTable绑定到要用作Datasource的控件,而不是填充项集合。然后,当有选择时,您可以告诉它要显示哪个元素以及要提交给您的值:

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将是用户选择的Employee的对象。