如何从 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
我正在尝试用 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