如何使用下拉列表值选择Excel数据表

时间:2016-07-07 13:37:19

标签: vb.net excel-vba vba excel

我正在开发一个使用excel文件作为其数据源的应用程序。当从下拉列表中选择工作表名称时,我希望DataGridView填充工作表的列。

这是我尝试过的:

Imports System.Data.OleDb
Public Class Form101
    Public cn As New OleDbConnection
    Public cm As New OleDbCommand
    Public da As OleDbDataAdapter

    Dim comb As String

    Public dt As New DataTable
    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Comb1.SelectedIndexChanged
        comb = Comb1.SelectedText
    End Sub
    Public Sub FillDataGridView(ByVal Query As String)
        da = New OleDbDataAdapter(Query, cn)
        dt.Clear()
        da.Fill(dt)

        With DataGridView1
            .DataSource = dt
            .Columns(0).HeaderText = "Date"
            .Columns(1).HeaderText = "Qty brought"
            .Columns(2).HeaderText = "Qty sold"
            .Columns(3).HeaderText = "Goods balance"
            .Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
        End With
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\toojah app\Stock card.xls; Extended Properties= Excel 8.0;"
        cn.Open()

        FillDataGridView("select * FROM ['" & comb & "'] ")
    End Sub
End Class

1 个答案:

答案 0 :(得分:1)

尝试这样的事情。第一个函数将收集excel文件中的所有列和记录,并将其放入数据表中。然后,如果要向datable添加其他列,可以在Public Sub CreateDataGridView中执行此操作。这已经过测试和运作。

Friend Shared Function BuildDatatable () as datatable

        Dim dt As New DataTable
        Dim Conn As System.Data.OleDb.OleDbConnection
        Dim cmd As System.Data.OleDb.OleDbDataAdapter



        dim MyFile as string = "C:\toojah app\Stock card.xls"


                    Conn = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + MyFile + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1';")
                    Conn.Open()
                    Dim dtSheets As DataTable = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
                    Dim listSheet As New List(Of String)
                    Dim drSheet As DataRow
                    For Each drSheet In dtSheets.Rows
                        listSheet.Add(drSheet("TABLE_NAME").ToString())
                        cmd = New System.Data.OleDb.OleDbDataAdapter("select * from [" & drSheet("TABLE_NAME").ToString() & "]", Conn)
                        cmd.TableMappings.Add("Table", "Net-informations.com")
                        cmd.Fill(dt)
                        Conn.Close()
                    Next

        Return dt

    Catch ex As Exception
        Return Nothing
    End Try

End Function

'This is used to pass the function datatable as a dt to then pass to the public sub as shown below. 
Dim dt As DataTable = BuildDatatable


Public Sub CreateDataGridView(dt)

Dim newColumn As New Data.DataColumn("ComeColumnName", GetType(System.String))     
newColumn.DefaultValue = "YourValues"
dt.Columns.Add(newColumn)

DataGridView1.DataSource = dt

End Sub