.
Anmeldung | Registrieren | Hilfe
in Suchen

Problem mit Anzeigen im dgView nach auslesen excel Worksheet

Letzter Beitrag 02. Aug 2010 9:51 von r.speri. 2 Antworten.
Seite 1 von 1 (3 Treffer)
Beiträge sortieren: Zurück Weiter
  • 29. Jul 2010 9:58

    • r.speri
    • Top 500 Mitwirkender
    • Registriert am 29. Jul 2010
    • Beiträge 2
    • Punkte 25

    Problem mit Anzeigen im dgView nach auslesen excel Worksheet

    Hallo zusammen,

    eine Suche nach einer Lösung meines Problem war leider erfolglos.
    Daher wende ich mich damit nun an euch, in der Hoffnung eine Lösung zu finden.

    Ich habe ein Formular das bei Aufruf ein Datagridview mit Daten aus einer Excel Tabelle einer bestimmten Spalte befüllt, nun mein Problem!
    Es werden immer mehrere leerzeilen am Ende mit angezeigt, diese möchte ich beseitigen.


    Function zum Auslesen der Daten:

    Public Function ReadXLSXFile(ByVal filename As String, ByVal tablename As String, ByVal columnName As String, ByVal dgv_MaterialXLS As DataGridView) As Boolean
            'Variablen für die Datenverbindung auf das XLS File deklarieren
            Dim oDs As System.Data.DataSet
            Dim oConn As System.Data.OleDb.OleDbConnection
            Dim oAdapter As System.Data.OleDb.OleDbDataAdapter
            Dim i As Integer
    
            'die Übergabewerte deklarieren
            Dim sFile As String = filename
            Dim sTable As String = tablename
            Dim sColumn As String = columnName
    
            ' Connection-String für die DB.Verbindung zur Excel-Datei
            Dim sConn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
                        filename & _
                        ";Extended Properties=""Excel 12.0;HDR=YES;"""
    
            ' Connection herstellen
            oConn = New System.Data.OleDb.OleDbConnection(sConn)
    
            ' Excel-Tabelle referenzieren
            ' Tabellenname muss mit abschließendem $-Zeichen und in eckigen Klammern stehen
            oAdapter = New System.Data.OleDb.OleDbDataAdapter("select [" & sColumn & "] from [" & sTable & "$]", oConn)
            oDs = New System.Data.DataSet
    
            ' DataSet erstellen und mit Daten aus dem DataAdapter füllen
            oDs = New System.Data.DataSet
    
            'Prüfen ob datei vorhanden
            If File.Exists(filename) Then
                oAdapter.Fill(oDs)
            Else
                MsgBox("Datei " & filename & " nicht vorhanden!")
            End If
    
            ' DataGrid füllen und Daten anzeigen
            With dgv_MaterialXLS
                .DataSource = oDs.Tables(0)
                .ReadOnly = True
                .Refresh()
            End With
    
            ' Dataset an Datagridview binden
            For i = 0 To oDs.Tables.Count - 1
                dgv_MaterialXLS.DataSource = oDs.Tables(i)
            Next
    
    
            ' Farbe der aktuellen Zeile im Datagrid
            With dgv_MaterialXLS.DefaultCellStyle
                .SelectionBackColor = Color.Gold
                .SelectionForeColor = Color.Red
            End With
    
            ' DB-Verbindung schließen
            oConn.Close()
        End Function

     

    vielen Dank im voraus!!!

    Ronny

    • IP-Adresse ist Registriert
  • 31. Jul 2010 11:20 Antwort zu

    • akk
    • Top 50 Mitwirkender
    • Registriert am 24. Nov 2009
    • Beiträge 49
    • Punkte 725

    Problem mit Anzeigen im dgView nach auslesen excel Worksheet

    Die Leerzeilen werden vermutlich von der Datenquelle stammen. Während des Debuggens ist das zu überprüfen, wenn dgv_MaterialXLS.DataSource markiert wird und per Shift-F9 die Schnellüberwachung aufgerufen wird. Ein Klick auf die Lupe und der Inhalt der DataTable wird tabellarisch angezeigt. Die DataGridView zeigt diese "Leerzeilen" am Ende der Tabelle an, schlicht deshalb, weil sei vorhanden sind. Diese Zeilen müssen aus der DataTable entfernt werden. Wenn das Programm nur Daten anzeigen soll, dann könnte ein DataTable.Rows.RemoveAt() den Job übernehmen, sollen Daten zurückgeschrieben werden, ist DataTable.Rows(rowIndex).Delete() die bessere Wahl, da damit die Infos erhalten bleiben, welche Zeilen in der Datenquelle zu löschen sind (Beispielcode am Ende).

    Anmerkung: eine DataGridView zeigt die Daten einer Tabelle. Im oben gezeigten Code gibt es mehrfache Zuweisungen

    ' DataGrid füllen und Daten anzeigen
    With dgv_MaterialXLS
        .DataSource = oDs.Tables(0)  <==
        .ReadOnly = True
        .Refresh()
    End With

    ' Dataset an Datagridview binden
    For i = 0 To oDs.Tables.Count - 1
        dgv_MaterialXLS.DataSource = oDs.Tables(i)  <==
    Next


    Letztlich wird nur der Inhalt der letzten Tabelle in der DataGridView dargestellt. Die "Leerzeilen" der Tabelle oDS.Tables(oDS.Tables.Count - 1) z.B. per TrimEnd() entfernen:

       Private Sub TrimEnd(ByVal dt As System.Data.DataTable)
          For rowIndex As Integer = dt.Rows.Count - 1 To 0 Step -1
             If IsRowEmpty(dt.Rows(rowIndex)) Then
                dt.Rows(rowIndex).Delete()
             Else
                'bei erster nicht-leerer Zeile Vorgang abbrechen
                Exit For
             End If
          Next
       End Sub
    
    
       Private Function IsRowEmpty(ByVal row As System.Data.DataRow) As Boolean
          'alle Spalten berücksichtigen
          For columnIndex As Integer = 0 To row.Table.Columns.Count - 1
             Dim value As Object = row(columnIndex)
             Dim arr As Array = Array.CreateInstance(row.Table.Columns(columnIndex).DataType, 1)
    
    
             'Spalte gilt als leer, wenn Inhalt DBNull.Value oder Nothing oder Leerstring oder dem 'Empty'
             'eines beliebigen Datentypes entspricht
             If value IsNot System.DBNull.Value AndAlso _
                value IsNot Nothing AndAlso _
                ((TypeOf value Is String AndAlso CStr(value) <> "") OrElse _
                 arr(0) Is Nothing OrElse Not value.Equals(arr(0))) Then
                Return False
             End If
          Next
    
    
          Return True
       End Function

    • IP-Adresse ist Registriert
  • 02. Aug 2010 9:51 Antwort zu

    • r.speri
    • Top 500 Mitwirkender
    • Registriert am 29. Jul 2010
    • Beiträge 2
    • Punkte 25

    Problem mit Anzeigen im dgView nach auslesen excel Worksheet

    @akk

    vielen Dank für die ausführliche Beschreibung, es ist immer wieder gut, wenn der Hintergrund mit dargestellt wird --> Weiterbildung Yes

    Deine Lösung habe umgesetzt und es erscheint mir auch als die Beste.

    Meinen Lösungsansatz mit einer Where-Anweisung im SQL-String habe ich somit verworfen.

    Vielen Dank! weiter So!Wink

    gruss Ronny 

    • IP-Adresse ist Registriert
Seite 1 von 1 (3 Treffer)

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum