如何从Excel或DataSet中读取数据填充Combobox
问题原因&解决方案
你代码里主要存在3处错误,修正后即可正常加载数据到组合框:
- SQL查询语法错误:你写的
select 'Skill Name' from [Skill DBase$]中Skill Name用了单引号,会被识别为固定字符串而不是表的列名,列名带空格需要用方括号包裹。如果需要绑定ID作为值,查询语句改为select [ID],[Skill Name] from [Skill DBase$]即可;如果不需要用到ID值,也可以只查询[Skill Name]列,后续删掉ValueMember的设置就行。 - 数据源列缺失错误:你原来的SQL仅查询了
Skill Name一列,但后续设置ValueMember = "ID"时,数据源里根本没有ID字段,会触发绑定异常,要么查询时补上ID列,要么删除ValueMember的赋值语句都可以解决。 - 可选:驱动兼容问题:如果你用的是64位系统,Microsoft.Jet.OLEDB.4.0只有32位版本,若项目编译目标为64位会报错,可以把项目目标平台改为x86,或者替换连接字符串为ACE驱动:
provider=Microsoft.ACE.OLEDB.12.0;Data Source='你的文件路径';Extended Properties="Excel 8.0;HDR=YES;"
修正后完整代码(保留ID绑定版本)
Private Sub LoadExcel() Try Dim MyConnection As System.Data.OleDb.OleDbConnection Dim DtSet As System.Data.DataSet Dim MyCommand As System.Data.OleDb.OleDbDataAdapter ' 64位系统可替换为ACE驱动的连接字符串 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;HDR=YES;") ' 修正SQL语法,列名带空格用方括号,补充ID列满足绑定要求 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) 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
内容的提问来源于stack exchange,提问作者Travis B
相关产品推荐
相关产品推荐

