如何从 Excel 或数据集中填充组合框

How to Populate a Combobox from Excel or DataSet

我正在尝试用 Excel 中的行填充组合框。我尝试了多个站点,但没有找到任何东西。这是我正在使用的代码,任何人都可以提供帮助,提前谢谢你。

    Private Sub LoadExcel()
        Try
            Dim MyConnection As System.Data.OleDb.OleDbConnection
            Dim DtSet As System.Data.DataSet
            Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
            MyConnection = New System.Data.OleDb.OleDbConnection _
               ("provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Users\UserName
\Desktop\Sharepoint_Tables_For_Tool2.xls';Extended Properties=Excel 8.0;")

            MyCommand = New System.Data.OleDb.OleDbDataAdapter("select 'Skill Name' from [Skill DBase$]", MyConnection)

            MyCommand.TableMappings.Add("Table", "SkillDbase")
            DtSet = New System.Data.DataSet
            MyCommand.Fill(DtSet)
            DataGridView1.DataSource = DtSet.Tables(0)
            ComboBox1.DataSource = DtSet.Tables(0)
            ComboBox1.ValueMember = "ID"
            ComboBox1.DisplayMember = "Skill Name"

            MyConnection.Close()

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
    Private Sub LoadExcel()
        Try
            Dim MyConnection As System.Data.OleDb.OleDbConnection
            Dim DtSet As System.Data.DataSet
            Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
            Dim list As New List(Of String)
            MyConnection = New System.Data.OleDb.OleDbConnection _
               ("provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Users\username\Desktop\Sharepoint_Tables_For_Tool2.xls';Extended Properties=Excel 8.0;")

            MyCommand = New System.Data.OleDb.OleDbDataAdapter("select [ID],[Skill Name] from [Skill DBase$]", MyConnection)

            MyCommand.TableMappings.Add("Table", "SkillDbase")
            DtSet = New System.Data.DataSet
            MyCommand.Fill(DtSet)
            DataGridView1.DataSource = DtSet.Tables(0)

            Dim Dt As DataTable = DataGridView1.DataSource
            ComboBox1.DataSource = Dt
            ComboBox1.DisplayMember = Dt.Columns(1).Caption
            ComboBox1.ValueMember = Dt.Columns(0).Caption


            MyConnection.Close()

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

我把你的Excel Sub 改成了一个返回DataTable 的函数。这将您的数据访问代码与您的用户界面代码分开。连接和命令等数据库对象需要处理和关闭。即使出现错误,Using...End Using 块也会为我们处理这个问题。由于您只使用一个 table,因此不需要 DataSet。如果要使用 ID 列,则必须将其添加到 Select 语句中。您不需要适配器(更新)的额外功能,因此我将该对象更改为命令。

访问标识符分隔符可能是 [ ]。

在设置数据源之前设置组合的值和显示属性以获得更好的性能。

Private Function GetSkillData() As DataTable
    Dim Dt As New DataTable
    Using MyConnection As New OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Users\UserName\Desktop\Sharepoint_Tables_For_Tool2.xls';Extended Properties=Excel 8.0;"),
        MyCommand As New System.Data.OleDb.OleDbCommand("select [ID], [Skill Name] from [Skill DBase$]", MyConnection)
        MyConnection.Open()
        Using reader = MyCommand.ExecuteReader()
            Dt.Load(reader)
        End Using
    End Using
    Return Dt
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim dt As DataTable = Nothing
    Try
        dt = GetSkillData()
    Catch ex As Exception
        MsgBox(ex.ToString)
        Exit Sub
    End Try
    DataGridView1.DataSource = dt
    ComboBox1.ValueMember = "ID"
    ComboBox1.DisplayMember = "Skill Name"
    ComboBox1.DataSource = dt
End Sub