Importstatus von Daten ins DataGrid

  • .NET (FX) 4.0
  • VB.NET

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

    Importstatus von Daten ins DataGrid

    Hallo Community,

    ich bin in dem Bereich der VB.NET Programmierung noch recht neu und komme aus dem VBA Bereich und genieße die vielen Vorteile von VB.NET. Jetzt habe ich allerdings eine Fragestellung, die ich auch mit "Tante Google" nicht beantwortet bzw. gelöst bekomme.

    Ich habe als Datenquelle eine Oracle Datenbank, welche abgefragt wird und ihre Daten in eine Windows Form und dort in DatGrid importiert. Dies alles funktioniert rechts gut, dauert durchaus aufgrund der Anzahl der Datensätze schon etwas Zeit.
    Daher würde ich gerne eine Statusbar einbauen, die den derzeitigen Importfortschritt anzeigt. Leider kann ich hierzu keine Hilfen im Netz finden.

    Hat jemand eine Idee, Lösungsansätze, die mir weiterhelfen können?

    Vielen Dank schon einmal im Voraus ...

    Gruß vom Doc

    Du hast ins falsche Unterforum gepostet. Bitte achte künftig darauf den richtigen Bereich zu wählen. Du wolltest das Thema außerdem unter "Datenbanken" erstellen. Ist das so korrekt? Ich dachte es geht hier eher um das Handling der Wartezeit im Formular. Verschoben. ~fufu

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

    Hallo ErfinderDesRades,

    vielen Dank für Deine Nachfrage. Ich hatte gedacht, dass es im Bereich der Datenbank angesiedelt sei. Einem Verschieben in einen anderen Forumsbereich steht eigentlich nichts entgegen.

    Jetzt zu meinem Problem. Während des Datenimports läuft bereits im Vordergrund eine "Wartenform", die dem User signalisieren soll, dass der Import stattfindet. Allerdings würde ich auch sehr gerne über den Fortschritt informieren. Die Anzahl der Datensätze liefert mir die Abfrage, bevor die Daten an das DataGrid übergeben werden. Somit wäre Max.Value bekannt.
    Ich habe allerdings keine Ahnung, ob das DataGrid überhaupt in der Lage ist, seinen Füllungszustand bekannt zu geben?

    Geht das Überhaupt?

    Gruß vom Doc
    @DrZwockel Wie befüllst Du denn das DataGrid?
    Komplett die ganze Tabelle
    oder
    jede Zeile einzeln?
    Im letzteren Fall kannst Du einen Progress laufen lassen.
    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!
    Hallo RodFRomGermany,

    zunächst vielen Dank für Deine Antwort. Wie bereits beschrieben bin ich auf dem Boden von VB.NET noch neu und binn froh, dass ich mein VBA Projekt langsam in Richtung VB portiert bekomme.

    ich befülle es folgendermaßen:

    DT = DataTable
    Reader = DataReader
    BS = BindingSource

    VB.NET-Quellcode

    1. ...
    2. SQLCMD.CommandText = SQL_String
    3. Reader = SQLCMD.ExcecuteReader
    4. DT.LOAD(Reader)
    5. Reader.Close()
    6. BS.DataSource = DT
    7. MetroGrid1.DataSource = BS
    8. ...


    Ich glaube, dass ich so das Grid in einem Rutsch fülle ... leider kenne ich derzeit keine andere Methode ( ?( ) ... wenn es eine bessere gibt, in der ich den Status auch abbilden kann, dann wäre das ein super Ding 8o

    Gruß vom Doc
    ich denke, dt.Load(reader) ist die schnellste und einfachste Art.
    Allerdings kriegst du da ja kein Fuß dazwischen, um abzufragen "Wieviel Prozent ist denn nu geladen?"
    Ok, du könntest das DataTable.RowChanged-Event oder sowas verarbeiten - aber dadurch dürfte der Ladevorgang deutlich langsamer werden.
    Vlt gehts auch garnet, nämlich kann sein, dass die DataTable ihre Events während des Ladevorgangs mit .Load() aussetzt.
    Müsste man einiges experimentieren.
    Hallo ErfinderDesRades,

    vielen Dank für die Info. Eine kleine Geschwindigleitseinbuße würde ich für dieses Feature in Kauf nehmen. Wenn dies allerdings den Prozess extrem verlangsamen würde, wäre das keine Alternative.

    Gruß
    vom Doc

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

    jo, also ich hab hier folgenden test

    VB.NET-Quellcode

    1. Public Sub New()
    2. InitializeComponent()
    3. AddHandler NewDataset.Person.RowChanged, AddressOf PersonRowChanged
    4. NewDataset.ReadXml(_DataFile.FullName)
    5. End Sub
    6. '...
    7. Private Sub PersonRowChanged(sender As Object, e As DataRowChangeEventArgs)
    8. If e.Action = DataRowAction.Add Then
    9. Dim i = 0 ' hält hier beim haltepunkt für jede einzelne eingelesene Zeile
    10. End If
    11. End Sub
    NewDataset.Person ist eine typisierte Datatable.
    .ReadXml ist laden aus einer Datei - wie gesagt, Laden aus einem DataReader habich noch nie verwendet.