2016-07-07 5 views
2

Ich arbeite an einer Anwendung, die Excel-Dateien als Datenquelle verwendet. Ich würde gerne die DataGridView mit den Spalten eines Blattes füllen, wenn ein Arbeitsblatt-Name aus der Dropdown-Liste ausgewählt ist. HierSo wählen Sie eine Excel-Datentabelle mithilfe eines Dropdown-Listenwerts

ist, was ich habe versucht zu tun:

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 

Antwort

1

so etwas wie dies versuchen. Die erste Funktion sammelt alle Spalten und Datensätze in Ihrer Excel-Datei und speichert sie in einer Datentabelle. Wenn Sie dem Datenelement zusätzliche Spalten hinzufügen möchten, können Sie dies im Öffentlichen Sub CreateDataGridView tun. Dies wurde getestet und funktioniert.

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

Hinzugefügt ich die HDR = YES erweiterte Eigenschaft und seine immer noch geben Fehler im Zusammenhang –

+0

was ist der Fehler und wo Sie es bekommen? Ich dachte, Sie wollten nur die Excel-Spalten in Ihrer Datagrid-Ansicht anzeigen? – coder32

+0

Ich bekomme immer noch OleDb Exception wurde in der öffentlichen Sub FillDataGridView (ByVal Query As String) unbehandelt. da.Fill (dt) –

Verwandte Themen