Nach FileSystemWatcher Event wird dgv nicht befüllt

  • VB.NET
  • .NET (FX) 4.0

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Kevin12345.

    Nach FileSystemWatcher Event wird dgv nicht befüllt

    Hey Leute,

    hab ein Problem mit dem Filesystemwatcher, der mein Datagridview nicht befüllt.

    Ich will eine Excel Tabelle in ein Ordner legen, der Filesystemwatcher erkennt die Tabelle. Funktioniert bis dahin Prima. Nun soll ein neues Event(import_xlsx) ausgelöst werden, der die Datei im DGV anzeigt.

    Komischerweise funktioniert das Event ohne den FileSystemWatcher einwandfrei. Wird nun über diesen Watcher dieses Event ausgelöst befüllt er das Datagridview nicht :(

    Hier mein Code :

    VB.NET-Quellcode

    1. Private Sub m_fsw_Changed(sender As Object, e As System.IO.FileSystemEventArgs) Handles m_fsw.Changed
    2. import_xls("C:\Users\user\Documents\Visual Studio 2010\WV_Stati_Adresspools1", " WV_Stati_Adresspools$")
    3. End Sub


    VB.NET-Quellcode

    1. Public Sub import_xls(ByVal path As String, ByVal tabelle As String)
    2. Dim oDs As System.Data.DataSet
    3. Dim oConn As System.Data.OleDb.OleDbConnection
    4. Dim oAdapter As System.Data.OleDb.OleDbDataAdapter
    5. Dim sConn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
    6. oConn = New System.Data.OleDb.OleDbConnection(sConn)
    7. oAdapter = New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [WV_Stati_Adresspools$]", oConn)
    8. oDs = New System.Data.DataSet
    9. Try
    10. oAdapter.Fill(oDs)
    11. With frmMain.DataGridView1
    12. .DataSource = oDs.Tables(0)
    13. .ReadOnly = True
    14. .Refresh()
    15. End With
    16. Catch ex As Exception
    17. MsgBox("Fehler beim Anzeigen der Excel-Daten!")
    18. Finally
    19. oConn.Close()
    20. End Try
    21. End Sub


    Hoffe da findet sich was, muss bis Montag fertig sein :(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kevin12345“ ()

    Kevin12345 schrieb:

    der mein Datagridview nicht befüllt
    Das ist zunächst erst mal richtig, denn der FSW befüllt keine DGV.
    1. FileSystemEventArgs hat die Property FullPath. Nutze sie.
    2. Setze auf die Zeile import_xls(...) einen Haltepunkt und verfolge den Programmablauf duech Einzelschrittabarbeitung.
      Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Kevin12345
    @VB1963
    Ja, so siehts aus.
    Und Achtung: FSW ist nicht trivial. Jede Menge Ereignisse werden geworfen, auch wenn GARNIX geändert wird (z.B. bei FSW.START)
    Und wenn man diverse Properties (z.B. .FILTER) falsch setzt, erhält man auch CHANGED wenn TEMP-Dateien erstellt werden (wie es EXCEL beim abspeichern von z.B. Änderungen macht).
    @~blaze~ wie müsste das genau Aussehn? Hab jetzt einiges ausprobiert und ich bin einfach mit meinem Latein am Ende.

    VB.NET-Quellcode

    1. ​Public Delegate Sub asy_thread()
    2. Private Sub m_fsw_Changed(sender As Object, e As System.IO.FileSystemEventArgs) Handles m_fsw.Changed
    3. Dim mymethod As New asy_thread(AddressOf import_xls)
    4. mymethod.Invoke()
    5. End Sub


    VB.NET-Quellcode

    1. ​Public Sub import_xls()
    2. Dim oDs As System.Data.DataSet
    3. Dim oConn As System.Data.OleDb.OleDbConnection
    4. Dim oAdapter As System.Data.OleDb.OleDbDataAdapter
    5. Dim sfile As String = "C:\Users\user\Documents\Visual Studio 2010\WV_Stati_Adresspools1"
    6. Dim sConn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sfile & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
    7. oConn = New System.Data.OleDb.OleDbConnection(sConn)
    8. oAdapter = New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [WV_Stati_Adresspools$]", oConn)
    9. oDs = New System.Data.DataSet
    10. Try
    11. oAdapter.Fill(oDs)
    12. With frmMain.DataGridView1
    13. .DataSource = oDs.Tables(0)
    14. .ReadOnly = True
    15. .Refresh()
    16. End With
    17. Catch ex As Exception
    18. MsgBox("Fehler beim Anzeigen der Excel-Daten!")
    19. Finally
    20. oConn.Close()
    21. End Try
    22. End Sub


    Hab das ganze jetzt ohne Parameter und auch ohne Begininvoke weil ich dazu auch einfach zuwenig im Internet finde.

    Wahrscheinlich ist mein Code auch total falsch :D

    EnableRaiseEvents ist auf true gesetzt