Re: Property "Objects" im Stringgrid
Zitat:
Wobei ich kein Profi für solches Low-Level-Gefriemel bin. Ich würde das ganze als das abtun was es ist. Ein simpler oller 2-dimenionaler Array, der dir eigentlich nix bringt, was nicht schon eine Variable eines 2d-TObject-arrays bringen würde. -> TypCasting bis zum Umfallen :? Es wäre vielleicht sinnvoller von dem Grid abzuleiten und die Items gleich von der Klasse zu nehmen, die deinen Daten entspricht. Oder besser: Eine Collection dieser Klasse, die du an das Grid packen kannst,... Was auch immer du machst, es wäre sicher lesbarer und flexibler wenn du nicht diesen komischen Array nutzt. (So wie es bis jetzt aussieht hast du ja dein Formular mit einer Menge Code zugestopft, der da nicht hingehört. ;) ) |
Re: Property "Objects" im Stringgrid
hallo robert,
das ist mir schon klar. ich wäre nur nie auf die Idee gekommen, es so zu realisieren. raik |
Re: Property "Objects" im Stringgrid
Hi,
habe das ganze mal durchexerziert. 8) Das geht so weit schon und ist wohl auch für solche Fälle gedacht. Aber : Ich kann ein neues Object erzeugen, mit row = row + 300 !! Für diese Dinger dann wieder wegzukriegen genügt es also nicht die Zellen eines Stringrids mit Rowcount, Free usw. durchzugehen. Was ist jetzt ? Wer setzt das konkret ein ? |
Re: Property "Objects" im Stringgrid
Ja, die Frage ist zumindest teilweise noch offen. Wer setzt das in der Praxis ein ?
|
Re: Property "Objects" im Stringgrid
Zitat:
Z.b. "Missbrauche" ich via TypCasting die Eigenschaft Object (bzw. Data bei einem TListView) dafür um die IDs von Datensätzen einer Tabelle zu speichern. In einem anderen Probjekt (Auftragserfassung) habe ich in einem eigenen Objekt, das im prinzip nur ein Record war, Informationen zu jeder Zeile gespeichert die dort nicht angezeigt werden sollten da diese Werte in Editfeldern gezeigt wurden. Ich finde das eine ganz tolle Sache. Man muss nur daran denken das man die erzeugten Objekte beim Löschen einer Zelle/Zeile selber wieder freigeben muss. Auch beim schliessen der Form muss man sich um die Freigabe der Objekte selber kümmern. |
Re: Property "Objects" im Stringgrid
Hi,
ich habe ähnliche Fragen wie Hansi. Mir wurde schonmal nahe gelegt, TObject zu benutzen, aber bis jetzt sehe ich keinen wirklichen Sinn darin. Ich habe ebenfalls ein Beispiel, bei dem ich gern wissen würde, ob das mit einen TObject besser umzusetzen wäre. Ich will einfach alle Zeilen im Grid in Arrays gespeichert haben, damit ich diese per Speicherklick dann alle abarbeiten bzw speichern kann. Meine Variante ist eine bissl umständlicher, aber funktioniert auch:
Delphi-Quellcode:
Wie ihr sehen könnt fehlt mir noch die Prüfung ob ünberhaupt etwas geändert wurde. Kann man das über ein TObject lösen, sodass man den alten Zelleninhalt im TObject speichert und ihm beim Verlassen der Zelle mit dem neuen Zelleninhalt vergleicht?
procedure TFmain.StringGridSetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String);
begin //Sobald ein feld editiert wird, wird die RowNummer im array a[x] gespeichert und die Änderungen im Label festgehalten if posproof(strtoint(lgrid_change.Caption),stringgrid.Row) = false then begin setlength(a,stringgrid.RowCount); zahl:=strtoint(lgrid_change.Caption); a[zahl]:=stringgrid.Row; lgrid_change.Caption:=inttostr(zahl+1); end; end; //Die Funktion um die Position der reihe zu ermitteln function TFmain.posproof(label_zahl,reihe:integer):boolean; begin if label_zahl > 0 then begin zahl:=1; while zahl < label_zahl do begin if reihe= a[zahl] then begin result:=true; exit; end else zahl:=zahl+1; end; result:=false; end else result:=false; end; //Das Speichern... zahl:=1; while zahl < strtoint(lgrid_change.Caption) do begin DM.SP_abrechnung_update.Params[0].AsString:= stringgrid.Cells[0,a[zahl]]; DM.SP_abrechnung_update.Params[1].AsString:= stringgrid.Cells[1,a[zahl]]; ... DM.SP_abrechnung_update.ExecProc; Dm.IBTrans.Commit; DM.IBTrans.Active := True; DM.Abrechnung.Open; zahl:=zahl+1; end; Und könnte ich gleich die geänderten in den Arrays speichern und dann abarbeiten, ohne das ich die Anzahl der Veränderungen im Label speichere? Schön Abend noch, Plautzer |
Re: Property "Objects" im Stringgrid
Zitat:
Und dafür die Stringgrid-Objects benutzen ? Das würde schon so gehen. Allerdings würde ich alles von Anfang an lesen. Da muß schon noch einiges bedacht werden. |
Re: Property "Objects" im Stringgrid
Zitat:
Ich wüsste mir sonst nicht weiter zu helfen. Ich möchte ermöglichen, dass man verschiedene Zellen bzw. Zeilen im Stringgrid editieren kann und dann nur die geänderten Zeilen auch geupdatet werden. Ich könnte es zwar so machen, das ich immer alles speichere, aber geht bei mir nicht, das ich jede Änderung(Zeitpunkt) festhalte und die sich dann ändern würde, auch wenn garnichts editiert wurde. Ich habe jetzt noch folgendes Problem, und zwar habe ich nun die Daten aus der Tabelle auf X Tabellen verteilt.Ich muss nun realisieren, dass wenn man in den verschiedene Tabellen editiert und dann speichert, auch alle Daten geupdadet werden. Das kann ich nicht wie oben lösen. Ich müsste an jeder Zelle eine Objekt,dranhängen, das den Tabellenname, die Zeile und wenns noch geht die ID beinhält. Wie gesagt, muss ich das ganze wieder in Variablen (Arrays) speichern um dann alle auf einmal zu speichern. Nochmal zur Änderung im Zelleinhalt: Zitat:
THx, Plautzer |
Re: Property "Objects" im Stringgrid
Du brauchst das Array nicht, weil du sowieso für jede Zelle ein Object mit Row und Col hast.
Dein Object würde dann so aussehen :
Delphi-Quellcode:
TPlautzerObject = class(TObject)
editierbar : boolean; ID : integer; TableName : string; end; |
Re: Property "Objects" im Stringgrid
Mahlzeit,
wenn ich das jetzt richtig verstehe, dann setze ich den Wert editiert der Zelle auf true. Wenn ich dann alles speichern will, dann lese ich alle zelle die aud true gesetz sind aus und kann mit den angehängten Informationen(reihe und ID), den ganzen Spaß auslesen, oder? Bin ich damit wieder auf den Holzweg? Wenn nicht, dann würde ich gern wissen wie man die Objekte wieder ausliest. Thx, Plautzer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz