2016-07-07 14 views
2

Excelのファイルをデータソースとして使用するアプリケーションで作業しています。ドロップダウンリストからワークシート名を選択すると、DataGridViewがシートの列を入力するのが大好きです。ドロップダウンリストの値を使用してExcelテーブルを選択する方法

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

はこのような何かを試してみてください:ここで

は、私がやって試してみましたものです。最初の関数は、すべての列とレコードをExcelファイルに収集し、それをデータテーブルに配置します。次に、データ項目に列を追加する場合は、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 
+0

私はエラーとあなたがそれを取得している何であるか、接続 –

+0

にHDR = YES拡張プロパティとそのまだ与えてエラーを追加しましたか?私はあなたのDataGridビューにExcelの列を表示したかったと思いましたか? – coder32

+0

私はまだOleDb ExceptionがパブリックSub FillDataGridView(ByValクエリAs String)で未処理だった。 da.Fill(dt) –

関連する問題