Problem mit TDBGrid

Hallo liebe Community,
ich habe folgendes Problem/Frage: Ich habe ein TPageControl mit mehreren TTabSheet in denen sich je ein TDBGrid befindet. Alle TDBGrid greifen auf die gleiche TDataSource zu, zeigen jedoch nur die für das jeweils ausgewählte TDBGrid erforderlichen Daten an. Soweit funktioniert auch alles wunderbar. Wenn ich auf ein beliebiges TTabSheet zugreife, lädt das TDBGrid die gewünschten Daten und zeigt sie an. Unter Anderem steht in jeder Zeile ein Preis. Nun habe ich ein separates TEdit, das eigentlich die Summe aller Preise anzeigen soll. Die momentane Lösung des Problems sieht so aus, daß ich in einer Schleife alle Zeilen von 1 bis Ende per

Navigator.BtnClick(nbFirst) gefolgt von Navigator.BtnClick(nbNext)

anspringe und dann per

Gesamtumsatz[1] := WGesamtumsatz[1] + DBTClientDataSet.Fields.Fields[9].AsCurrency

auslese. Sehr umständlich und vor allem bei größeren Datenmengen auch recht langsam.
Eigentlich möchte ich ja lediglich die Summe der Spalten X in allen Zeilen wissen, wenn eine Boolean den Wert true hat. Nur sehe ich momentan den Wald vor lauter Bäumen nicht. Ich hoffe, ich habe mein Problem verständlich erklärt. Bin für jede Hilfe dankbar!

Hallo,

Navigator.BtnClick(nbFirst) gefolgt von Navigator.BtnClick(nbNext)

für so etwas benutzt man nicht den Navigator, denn damit werden alle an die DataSource gebundenen Steuerelemente aktualisiert (siht man daran, dass der Balken durch das Grid läuft).
Besser Du greifst direkt auf das Dataset zu (am besten nicht mit der Feldnummer sondern mit dem Feldnamen sonst bekommst DU Probleme, wenn sich etwas an der DB-Struktur ändert):

MyTable.first; //MyTable = TTable oder TQuery o.ä.
while not MyTable.eof do begin
Sum := Sum + MyTable.FieldByName('Preis').AsCurrency;
MyTable.Next;
end;
\>/pre\>

falls das immer noch zu langsam ist, kannst Du während der Berechnung die DataSource vom Dataset abkoppeln.

Alternativ kannst Du auch die Zeilen des Grids abfragen:



    
    for zeile := 1 to Grid.RowCount-1 do begin //wenn erste Zeile Spaltenüberschriften enthält
    Sum := Sum + StrToCurr(Cells[spalte, zeile]);





Gruß, Niels

Hallo Niels,
danke für deine Antwort. Allerdings müßte ich zur Umsetzung die ganze Struktur ändern. Wie dir vielleicht entgangen ist, arbeite ich mit MyBase - weil es für mein Projekt vollkommen ausreichend ist und nicht soviel unnötigen Ballast mitsich bringt. Deshalb würde ich gerne bei MyBase bleiben, wobei deine Vorschläge nicht funktionieren, weil es die erwähnten Eigenschaften (Cells[Spalte, Zeile]) etc. einfach nicht gibt.

Liebe Grüße,

Mario