none
Daten in Grid laden RRS feed

  • Frage

  • Hallo,

    ich habe mal eine grundsätzliche Frage. Wie lädt man Daten am besten in Datagrid´s?

    In der Literatur wird oft das "Load-Event" des Windows dafür benutzt. Gibt es dazu

    Alternativen? Gibt es zwischen einem DataGrid und einem "normalen" Grid Leistungsunterschiede?

    Beeinflussen StringFormatierungen die Ladezeit und was gibt es zu beachten?

    Dirk 

    Donnerstag, 27. Dezember 2012 15:56

Antworten

  • Danke.

    Es hat tatsächlich mit der Anzahl der Datensätze zu tun (auch schon bei relativ kleinen Datenbeständen).

    Und zum anderen war die Bindung nicht besonders gelungen.....

    Dirk

    • Als Antwort markiert Dirk2006 Montag, 7. Januar 2013 11:46
    Montag, 7. Januar 2013 11:45

Alle Antworten

  • Hallo,

    laden kannst du es über viele Wege, über Loaded ist eine Variante eine weitere wäre beispielsweise eine Datanbindung, wobei du die Daten am besten auch in Loaded lädst (geht aber auch schon im Konstruktor).

    Ein DataGrid wird für das Anzeigen Tabellarischer Daten genutzt, dafür ist es auch konzipiert. Ein normales Grid dagegen fasst Controls und kann diese in einem Zeilen/Spalten/Freien Muster platzieren. Eines für das andere zu nehmen wäre schlicht weg sinnlos, leistungsfressender und es würden Funktionen fehlen (Filter, größenveränderbare Spalten, ...).

    StringFormatierungen verzögern das Laden, das hat es nunmal so an sich wenn man einen Typ als einen String eines bestimmten Formats anzeigt. Andererseits, wie willst du es sonst machen? Bei jedem DateTime manuel darauf achten, das der Wochentag davor steht? Anders würde es wahrscheinlich (bin mir ziehmlich sicher) sogar noch mehr Leistung verbrauchen.

    Ich hoffe ich konnte dir etwas helfen ;)


    Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook

    Donnerstag, 27. Dezember 2012 16:06
    Moderator
  • Hi,
    da wir hier im WPF-Forum sind, beantworte ich mal die Fragen in Bezug auf WPF.
     
    Für das Anzeigen der Daten ist zu berücksichtigen, dass bei Nutzung eines Grids gleichzeitig mehrere Datenobjekte bzw. Datensätze angezeigt werden. Dazu müssen zuerst die Daten in einen Datenpuffer geladen werden. Aus diesem Datenpuffer bezieht dann das Grid die Daten für die Anzeige, ggf. bei jedem Refresh des Grids. Dieses Refresh wird u.a. auch ausgelöst, wenn mit einem anderen Fenster das Grid zeitweilig überdeckt wurde und dann wieder sichtbar wird. Das Grid selbst Puffer keine Daten. Gepuffert wird lediglich für die Zeit eines Editiervorganges der Inhalt der in diesem Zeitpunkt bearbeiteten Zelle.
     
    Damit das Grid weiß, woher es die Daten für die Anzeige beziehen soll, muss der Datenpuffer zugewiesen werden. Das ist erst möglich, wenn das Grid existiert (instanziiert wurde). Ein guter Zeitpunkt dafür ist das Load-Ereignis des Containers (Form). Alternativ dazu sind auch spätere Ereignisse möglich, wie beispielsweise die Anforderung des Grids zur Bereitstellung der Daten für die Anzeige.
     
    Der Unterschied zwischen einem DataGrid und einem Grid-Container ist bedeutend. Das DataGrid ist in der Lage, aus den Daten (Datenstruktur) Spalten zu generieren und entsprechende Typkonvertierungen selbständig auszuführen und viele Datenobjekte/-zeilen automatisch anzuzeigen. In einem Grid-Container muss man sich um jede Zelle selbst kümmern. Das betrifft die Entscheidung zur Auswahl der Steuerelemente in jeder Zelle und zur Bindung an die Datenobjekte und dessen Eigenschaften.
     
    Über Leistungsunterschiede sollte man sich bei den heutigen Rechnern vor allem Gedanken um den eigenen Programmcode machen. Ein Anwender wird in einer überschaubaren Zeit nur eine begrenzte Menge von Datenobjekten / Datensätzen verarbeiten (anschauen) können. Es obliegt also dem Programmierer, eine intelligente Auswahlstrategie zu implementieren, die auch eine effektive Arbeitsweise ermöglicht.
     
    String-Formatierungen sind bei einer Anzeige IMMER erforderlich, wenn die Daten nicht bereits als Zeichenkette vorliegen. Wenn die Konvertierung nicht selbst im Programmcode gemacht wird, dann wird implizit die ToString-Methode incl. der Culture-Einstellungen genutzt. Mit eigenen Konvertierungen kann man wieder unpassenden Programmcode erzeugen, der dann die Anwendung verlangsamen kann.
     
    --
    Peter Fleischer
    Donnerstag, 27. Dezember 2012 17:40
  • Erstmal vielen Dank für die Unterstützung.

    Bei einem "einfachen DataGrid" gibt es eigentlich keine Probleme. Wenn ich aber mehrere (Bsp.: 2)

    DataGrid´s in einem Fenster anzeigen möchte, kommt es zu Laufzeitproblemen. Ich denke, es liegt an der Bindung. Ich weise den Datagrid´s im Code-Behind ihre Quelle zu, sortiere und gruppiere. Vielleicht ist das einfach nicht der richtige Weg.

    Es ist mir klar, dass ich die Anzahl der Datenobjekte bzw. der Datensätze bei der Anzeige begrenzen

    muss. Bei String-Formatierungen nutze ich die Culture-Einstellungen, habe aber trotzdem das Gefühl, dass sich dadurch das Laufzeitverhalten verschlechert.

    Gibt es irgendwo einen Link oder Literatur, der/die einem den Weg aufzeigt, wenn man mit mehreren

    Datagrid´s arbeiten möchte?

    Vielleicht verschachtel ich die einfach zu ungeschickt.

    Danke

    Dirk

    Sonntag, 30. Dezember 2012 16:42
  • Hi,
    ich kann nicht erkennen, was Du konkret machst. Wie stehen die beiden Gris in Beziehung?
     
    Wenn es eine Master-Child-Darstellung in 2 Grids ist, dann dürfte es keine Zeitprobleme geben, wenn alle Daten geladen sind und die Child-Datenquelle entsprechend gefiltert bzw. untergeordnet ist.
     
    Zeitprobleme kann es geben, wenn die Child-Daten beim Navigieren im Master jedes Mal nachgeladen werden.
     
    --
    Peter Fleischer
    Sonntag, 30. Dezember 2012 19:02
  • Danke.

    Es hat tatsächlich mit der Anzahl der Datensätze zu tun (auch schon bei relativ kleinen Datenbeständen).

    Und zum anderen war die Bindung nicht besonders gelungen.....

    Dirk

    • Als Antwort markiert Dirk2006 Montag, 7. Januar 2013 11:46
    Montag, 7. Januar 2013 11:45