Darstellung einer Datenbasis mit dem DataGrid-Steuerelement

Das Comarch.POS.Presentation.Core.Controls.DataGrid-Steuerelement basiert auf dem aus .NET bekannten Steuerelement und ermöglicht die Darstellung einer Sammlung von Daten, die in Spalten und Zeilen aufgeteilt sind. Das DataGrid-Steuerelement in POS ermöglicht zusätzlich die asynchrone Datenerfassung, unterstützt das Paging von Listen (Laden von Daten beim Scrollen der Liste), ändert die Implementierung der Datensortierung und modifiziert den Gruppierungsmechanismus durch das Hinzufügen von Datenaggregation.

Asynchroner Datenabruf

Damit die Daten asynchron abgerufen werden können, muss ihre Quelle mit der Eigenschaft AsyncItemsSource auf dem DataGrid geclustert werden. Die Quelle muss ein Objekt der Klasse AsyncDataGridCollection<T> sein, wobei T der Datentyp ist, der in einer einzelnen Zeile dargestellt werden soll. Die für den Datenabruf zuständige Logik sollte im ersten Parameter des Konstruktors der Klasse AsyncDataGridCollection definiert werden. Die abgerufenen Daten sollten hingegen der Data-Sammlung zugeordnet werden.

Beispiel

Documents = new AsyncDataGridCollection<TradeDocumentListRow>(
    (token, o) =>
    {                   
                   //Die Daten werden heruntergeladen
        var documents = GetDocumentsAsync(token, o);
 
                  //Nur ein Thread kann jeweils die Sammlung modifizieren.
        lock (Documents.DataLock)
        {
                           //Service zum Downloadabbruch
            if (token.IsCancellationRequested)
            return null;

                            //Bei jedem Aktialisieren muss die Liste gelöscht werden
            Documents.Data.Clear();
 				
                            //Die Daten werden der Sammlung eingefügt, die von DataGrid gelesen wird		 
            Documents.Data.AddRange(data);			
        }
 
    return documents;
    }, OnReceiptsOperationCompleted, loggingService);


 

Das Beispiel zeigt die Definition der Documents-Eigenschaft, die im Konstruktor des ViewModells implementiert ist und an die AsyncItemsSource-Eigenschaft des DataGrid-Steuerelements geclustert ist. Das erste Argument des Konstruktors ist eine einfache Datenabfragelogik (ohne Paging). Die Methode wird automatisch asynchron direkt vom DataGrid-Steuerelement aufgerufen, sobald es initialisiert ist. Um manuell zu entscheiden, wann die Daten abgerufen werden sollen, ändern Sie den Wert der Eigenschaft LoadDataOnDataGridInitialisation=false im Documents-Objekt. Beim Datenabruf die Documents.Refresh(false)-Methode aufrufen. Der zweite Argument des Konstruktors ist die Methode, die im UI aufgerufen wird, nachdem die Abruflogik abgeschlossen wird. Der dritte Parameter ist ILoggingService, die Service-Instanz zum Loggen von Fehlern, mit der die potenziellen Ausnahmen, die beim Abruf vorkommen, in den Logs der Anwendung gespeichert werden.

Daten sortieren

Paging kann standardmäßig definiert werden und vom Benutzer jederzeit geändert werden, indem Sie auf die ausgewählte Spalte klicken. Der Standardwert kann wiederum in der Layoutverwaltung geändert werden. Das Steuerelement führt die Aufgabe nicht selbst aus, sondern delegiert sie an die Datenquelle und initiiert eine Abrufmethode, die nur Informationen über die gewünschte Sortiermethode sendet. Informationen darüber, wie die abgerufenen Daten sortiert werden sollen, können aus der Eigenschaft Sorting im Objekt Dokuments ausgelesen werden.

Sorting : List<GridSortDescription> – die Liste enthält Informationen darüber, nach welcher Spalte und auf welche Art und Weise sortiert werden soll.

Bestandsteile der GridSortDescription-Klasse:

PropertyName : string – Name der Spalte, die in der SortMemberPath-Eigenschaft der Spalte definiert wurde. Wenn kein Name definiert ist, wird standardmäßig der Name der in Bindung verwendeten Eigenschaft verwendet.

Direction : ListSortDirection – Richtung der Sortierung, mögliche Optionen: Aufsteigend oder Absteigend.

Column : DataGridColumn – Bezug auf die Spalte

Paging – Listen

Paging, also dynamisches Abrufen von Daten besteht darin, dass , während der Benutzer beim Scrollen zum Ende der Liste kommt, initiiert das DataGrid-Steuerelement eine asynchrone Methode, die die Daten abruft und die Quelle darüber informiert, dass ein weiterer Teil benötigt wird, wenn er vorhanden ist. Dieser Mechanismus ermöglicht den effizienten Umgang mit großen Datensätzen, bei denen das Herunterladen des gesamten Satzes nicht effektiv oder effizient wäre.

Die Paging-Logik selbst muss in der Quelle implementiert werden.  Um zu wissen, welchen Teil der Daten das Steuerelement anfordert, müssen die Eigenschaften ItemsToTake und ItemsToSkip verwendet werden, die sich im Objekt der Klasse AsyncDataGridCollection<T> befinden.

ItemsToTake : int – die Anzahl der Datenzeilen, die das Steuerelement anfordert.

ItemsToSkip : int – die Anzahl der Datenzeilen, die vom Anfang des Satzes übersprungen werden sollen (diese Zahl steht für die Anzahl der Zeilen, die bereits zuvor abgerufen wurden).

Gruppierung und Aggregation

Das DataGrid-Steuerelement unterstützt einen Mechanismus zur Gruppierung und Aggregation der Entitätswerte des Satzes, die durch das Steuerelement dargestellt werden. Wird die Gruppierung-Funktion aktiviert, wird das Datenpaging auch aktiviert. Um die Gruppierung zu aktivieren, legen Sie die Eigenschaft IsGroupingEnabled=”True” für das Steuerelement fest. Die Gruppierung ist in der UI-Verwaltungsansicht vollständig verwaltbar und ermöglicht die Gruppierung und Aggregation nach vordefinierten Eigenschaften. Um eine Eigenschaft gruppierbar zu machen, muss sie mit dem Attribut [AllowGroupBy] (aus dem Namespace: Comarch.POS.Core) markiert werden. Mit dem Attribut können optional der Pfad zur Ressourcendatei und das Postfix des Übersetzungsschlüssels definiert werden. Der Standardwert ist Properties.Resources, und jeder Schlüssel ist der Name der Eigenschaft plus der Header-Postfix. Zum Beispiel, für die Eigenschaft mit dem Namen Name ist dies NameHeader.

Die Aggregation ist auch nur nach allen mit dem Attribut AllowGroupBy gekennzeichneten Eigenschaften möglich. Im Standard sind folgende Aggregationsmethoden möglich: Summe, Durchschnitt, Maximum, Minimum. Diese Methoden funktionieren nur bei Eigenschaften vom Typ numerisch oder String, die in einen numerischen Typ konvertiert werden.

Erweiterbarkeit der Aggregation

Um eine benutzerdefinierte Aggregationsmethode hinzuzufügen, erstellen Sie eine neue Klasse, die IAggregationType (Namespace: Comarch.WPF.Controls.Aggregation) implementiert. In dieser Klasse implementieren Sie den Aggregationsmechanismus in der Function-Eigenschaft.

Wenn wir davon ausgehen, dass unsere neue Aggregation nur für Zahlen implementiert werden soll, können wir von der Klasse AggregationNumberType erben, anstatt die Schnittstelle zu implementieren. Dann muss die Aggregate-Methode überladen werden, ohne auf die Überprüfung der Datentypen zu achten, die aggregiert werden.

Schließlich sollte die erstellte Klasse als neue Aggregationsmethode im System registriert werden. Rufen Sie in der Modulklasse die Methode RegisterDataGridGroupAggregation auf, übergeben Sie den Klassennamen und definieren Sie den Schlüssel und die Ressource, von denen die Übersetzung für die neue Aggregationsmethode übernommen werden soll.

Mehr davon in Beispiel für Implementierung von eigener Datenaggregation in DataGrid

Gruppieren nach Attributen:

Die Gruppierung und Aggregation nach Attributen erfolgt automatisch und erfordert keine zusätzliche Implementierung. Wichtig ist nur, dass das Elementobjekt, das die Attribute enthält, folgende Eigenschaften hat:

  • Attributes vom Typ Dictionary<string,AttributeEntity>
  • AttributeRows vom Typ AttributesDictionary

Czy ten artykuł był pomocny?