DevTrain

Autor: Hannes Preishuber

ADO .NET:Offline Daten sind doch gut!

Nachdem die Daten von der Datenquelle geholt worden sind, liegen die da so im Dataview rum. Wenn sie schon mal da sind, kann man auch einige interessante Dinge machen wie sortieren oder filtern. Sogar Relationen lassen sich so noch nachträglich formen.
Beim experimentieren fallen aber vielleicht auch Exoten ins Auge wie Compute. Damit lässt sich im Dataview ein Ausdruck per Aggregat Funktion berechnen.

Eine praktische Anwendung ist ein Einkaufskorb aus einem Online Shop in dem auch gleich die Gesamtsumme berechnet und angezeigt wird. Dazu wird Compute mit der Funktion Sum verwendet.  Mit einem zweiten Parameter lässt sich sogar die Rechengrundlage einschränken.
Zum Anzeigen wird ein Label verwendet und so könnte man mit einer Zeile diesen Job erledigen.
lblSumme.Text = ds.Table.Compute("Sum(preis*anzahl)","Artnr>1000")

Isd doch toller Code? Wie so oft mit den schönen Dingen sieht die Wahrheit anders aus. Dieses Sample funktioniert nicht! Sum aktzeptiert nur direkt eine Spalte. Man muss erst eine Spalte schaffen, die das Ergebnis Preis* Anzahl liefert. Dies führt uns aber gleich zur zweiten wunderbaren Eigenschaft. Man kann jederzeit an seine Daten Spalten anhängen.
Also bauen wir eine Spalte ein, die die Multiplikation durchführt. Ums ein bischen zu erschweren, gehen wir davon aus, das Anzahl und Preisspalte als String vorliegen. Dann muss noch mit dem Befehl Convert gearbeitet werden um einen Datentyp zu erhalten, der sich auch multiplizieren lässt.
dv.Table.Columns.Add("total", System.Type.GetType("System.Double"), "Convert(preis, 'System.Double')*Convert(anzahl, 'System.Double')")
lblSumme.Text = CStr(dv.Table.Compute("Sum(total)", ""))   

Als Bedingung können verschiedene Ausdrpcke verwendet werden. Die Syntax ist SQL ähnlich.

"ItemName LIKE 'product*'"

Bei Datumswerten siehts ein bischen anders aus. Man fühlt sich an Access erinnert.
"Geburtstag < #1/31/68#"

Der Vorteil dieser Vorgehensweise ist, das man nicht extra zur Datenbank muss um dort Ergebnisse zu berechnen. Auf der anderen Seite muss man nur minimalen Code tippen. In Summe ein tolles Feature  das man nicht mehr in ADO .NET missen möchte.


 


Erfasst am: 25.04.2002 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=753
© Copyright 2003 ppedv AG - http://www.ppedv.de