.net - 从数据库查询填充组合框

标签 .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) --- 此行带有下划线

错误表示:表达式不产生值

编辑2:

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

现在我收到另一个错误:无法绑定(bind)到新值成员。 这发生在combobox1.valuemember =“Label”

最佳答案

您可以将 DataTable 绑定(bind)到要用作数据源 的控件,而不是填充项目集合。然后,您可以告诉它要显示哪个元素以及在进行选择时要向您提交哪个值:

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

“Name”和“Id”是数据库表中的列名称。在这种情况下,您可能想要使用的事件是 SelectedValueChanged,并且 SelectedValue 将保存与所选项目相关的 ID。这将作为 Object 返回,因此您可能需要将其转换回原来的样子。

您还可以以相同的方式绑定(bind)到 List(Of T) 集合。在这种情况下,SelectedItem 可能是整个对象。例如,使用 List(of Employee)SelectedItem 将是用户选择的 Employee 的对象。

关于.net - 从数据库查询填充组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42747089/

相关文章:

mysql - 如何将数据表绑定(bind)到 reportviewer 运行时

.net - 如何让 "Programming Entity Framework: DbContext"示例运行?

c# - 数据 View 和数据表有什么区别?

vb.net - 通过线程访问ProgressBar

xml - Delphi XML 绑定(bind)向导和可选元素

使用 CollectionViewSource 和 DataBinding 的 WPF 分组

c# - 动态 Linq + Entity Framework : datetime modifications for dynamic select

c# - 如何在 Aspose.PDF .NET 中旋转表格单元格中的文本

vb.net - := syntax?的用途是什么

.net - VB.net WebBrowser 锁定 Office 文件以防止删除