Autor Beitrag
curtiss
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 59



BeitragVerfasst: Fr 18.03.11 15:37 
Hi!

Folgendes: Ich habe ein StringGrid dessen Zellen ich derzeit "manuell" über eine Methode mit den Werten aus dem jeweiligen Objekt der Zeile befülle.

Das Grid dient nur der Visualisierung ich arbeite rein mit Objekten, soll heissen ich greife nicht auf werte des Grids zurück.

Beispiel:
ich habe ein Grid, dessen zeilen jeweils einen Artikel bekommen. Der artikel hat Nr, Name, Preis.
Innerhalb des Codes ändert sich zB. der preis von Artikel A. Nun muss ich in dem Grid meine Zeile mit Artikelobjekt A finden und dann meine Methode aufrufen, welche die Werte der Zellen mit denen des Objekts auffrischt.

Was ich mich nun Frage ist:
Kann ich dem Grid nicht sagen wenn du spalte y zeichnest, dann nimm den wert Y aus dem Objekt?
Dann könnte ich der Zeile einfach mein Objekt geben, welches dann die werte der Spalten bereitstellt, welche sich das Grid automatisch zieht.

Vorteil hierbei wäre, ich muss nur einmal das neuzeichnen anstoßen da die Objekte aktuell sind und nicht die jeweils zu aktualisierenden Zeilen ausfindig machen und neu füllen.

Habe diesbezüglich bei Google gesucht aber nix gefunden!?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 18.03.11 15:55 
Für den Zweck ein StringGrid zu benutzen ist irgendwie... komisch.

Nimm einfach eine TVirtualStringTree und gut ist es. Sieht tausendmal besser aus und macht das von Hause aus so.
icho2099
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 101
Erhaltene Danke: 12

WIN XP, WIN 7, WIN 10
Delphi 6 Prof, Delphi 2005, FPC
BeitragVerfasst: Fr 18.03.11 16:30 
Ich mache das manchmal auch so,
allerdings hänge ich die Objekte dann an die jeweils erste Zelle jeder Zeile.

Die Zellen speichern ja jeweils einen String und einen Pointer, den man dazu verwenden kann.
OnDrawCell() füllt dann die Zellen des Grid aus.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 18.03.11 16:52 
Eine Objektliste mit Deinen Objekten welche eine IndexValue-Property haben (bekommen) , dann kannst Du im DrawCell per
ausblenden Delphi-Quelltext
1:
 ... ObjektList[Arow].ValueByIndex[ACol] ...					


zugreifen

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
curtiss Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 59



BeitragVerfasst: Fr 18.03.11 17:27 
@Bummi: das klingt sehr gut! Indexierte Values kenne ich (noch) garnicht.
Das Grid muss ich dennoch neu (manuell) neu Zeichnen oder? Ich meine, das Grid bekommt ja nicht mit, welche daten Sich geändert haben!?

Und: Pro Zeile liegt ein Objekt in der ersten (0) Spalte!

Zum Thema Grid ist die falsche komponente: Es gibt mir die möglichkeit einer Tabelarischen darstellung und zB. Node-Darstellung was diese Komponente durchaus sinnvoll für meinen Einsatzzweck macht!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 18.03.11 19:39 
user profile iconcurtiss hat folgendes geschrieben Zum zitierten Posting springen:
Zum Thema Grid ist die falsche komponente: Es gibt mir die möglichkeit einer Tabelarischen darstellung und zB. Node-Darstellung was diese Komponente durchaus sinnvoll für meinen Einsatzzweck macht!
Die VirtualTrees kombinieren die Möglichkeit einklappbare Unterknoten einer TreeView und eine tabellarische Darstellung zu haben.

Auf diese Weise kannst du einer Zeile ein Datenobjekt zuordnen und die VirtualTreeView fragt dich dann zur Laufzeit was in welche Spalte gehört. Es wird also anders als beim StringGrid oder der TListView gar nicht erst irgendwo ein Text hinzugefügt, sondern es wird einfach bei dir gefragt was an der gerade zu zeichnenden Stelle hingehört.

Das ist also exakt wie du es haben möchtest, nur extrem viel schneller als mit TListView oder TStringGrid. Zudem hast du auch deutlich mehr Möglichkeiten und die Bedienung ist auch deutlich intuitiver und anpassbarer (vom eher grausigen Aussehen des TStringGrids einmal ganz abgesehen).