Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Stringgrid teilweise befüllen?! (https://www.delphipraxis.net/187808-stringgrid-teilweise-befuellen.html)

st.w 5. Jan 2016 21:00

Stringgrid teilweise befüllen?!
 
Hallo,

ich habe ein Programmsystem übernommen, das in D4 programmiert ist, und das ich aufmöblen werde.

Mein Problem ist, dass ich eine Stringgrid von 150000x10 Felder habe und dies (logischerweise) an Grenzen kommt, insbesondere wenn noch sortiert werden soll. (DBGrid kann ich dafür nicht nehmen).

Meine Frage: Ich würde gerne nur ca. 100 der 150000 Zeilen der Stringgrid befüllen und den Rest erst dann, wenn der Benutzer diesen Bereich auch durch Scrollen oder Seitensprung z.B. benötigt.

Gibt es dafür eine Unterstützung ?

Vielleicht hatte ja jemand schon mal damals eine Lösung, die für mich heute auch passen würde.

Da ich mich erstmal in Delphi eindenken muß, habe ich noch nicht die rechte Idee, wie ich so etwas suchen und vorallem finden soll.

Danke für Eure Hilfe (/Erinnerungen)!

Viele Grüße,
Stefan

mkinzler 5. Jan 2016 21:24

AW: Stringgrid teilweise befüllen?!
 
Das Problem schreit nach der Verwendung der Komponente mit virtuellem Modus. Z.B. dem Virtual TreeView.
Bei diesem Verfahren werden die Werte dynamisch geladen wenn benötigt.

Sir Rufo 5. Jan 2016 22:23

AW: Stringgrid teilweise befüllen?!
 
Geht mit dem StringGrid auch, wenn man das Zeichnen des Zellwerts selber übernimmt.

Dem Grid selber gibt man dabei gar keine Daten, sondern fragt diese entsprechend ab. Es werden nur die Zellen gezeichnet, die eben aktuell sichtbar sind. ;)

st.w 6. Jan 2016 06:37

AW: Stringgrid teilweise befüllen?!
 
Guten Morgen zusammen,

danke für die prompten Ideen :-D

TreeViews erinnern mich an mein Maschinenbaustudium um 1994 herum, als ich die mal selbst programmieren durfte.... Eine Umsetzung für meine Anwendung kann ich aber leider gar nicht sehen....

Das OnCellDraw, dass Sir Rufo vorschlägt nutze ich schon, um die Texte auf farbigem Hintergrund oder ausgerichtet anzuzeigen.
Die Idee, die Werte dynamisch zu holen ist sehr gut...

Aber wieviel Speicher braucht eine Stringgrid, die eine Spaltenanzahl von 150000 hat. Kann ich das auch mit D4 schon abfragen?

Danke für die Idee! Ich werde es gleich ausprobieren.

Viele Grüße,
Stefan

Dejan Vu 6. Jan 2016 07:23

AW: Stringgrid teilweise befüllen?!
 
Die vorgeschlagene Komponente 'Virtual TreeView' ist eine eierlegende Wollmilchsau. Oder eine TreeViewGridListViewCheck oder so ähnlich. Mit dem Teil kannst Du auch ein Grid darstellen.

Wieso muss man denn überhaupt 150.000 Daten scrollbar anzeigen? Geht es nicht viel viel einfacher mit 'blättern', also dem seitenweise Anzeigen der Daten? Dazu benötigst Du nur 4 Buttons: '1.Seite', 'Seite zurück', 'Seite vor' und 'Letzte Seite'. Dann noch ein Suchfeld und das Sortieren erledigst du über die Clickhandler des Stringgridheaders.

DeddyH 6. Jan 2016 07:23

AW: Stringgrid teilweise befüllen?!
 
Man sollte sich von dem Namen des Virtual Treeview nicht täuschen lassen, das Ding kann auch als Grid fungieren und gilt quasi als die eierlegende Wollmilchsau (und ist zudem OpenSource).

[edit]:lol:[/edit]

Perlsau 6. Jan 2016 07:53

AW: Stringgrid teilweise befüllen?!
 
Zitat:

Zitat von st.w (Beitrag 1326111)
Aber wieviel Speicher braucht eine Stringgrid, die eine Spaltenanzahl von 150000 hat. Kann ich das auch mit D4 schon abfragen?

Meinst du wirklich 150.000 Spalten? Oder nicht doch eher Zeilen?

Mich würde – sollte es sich tatsächlich um Zeilen statt Spalten in dieser "Unzahl" handeln – vor allem interessieren, wie die Daten denn vorliegen. Werden die von einem Datenträger beim Programmstart eingelesen? Oder aus einer Datenbank geholt? Je nach Größe des Arbeitsspeichers und der Größe der jeweiligen Records passen schon ein paar Hunderttausend Datensätze in den Speicher. Am einfachsten wäre es dann wohl, sich einen entsprechenden Record zu basteln und ein dynamisches Array of MyRecord zu erzeugen, das die Daten beinhaltet. Noch besser allerdings wäre ein TObjectList (falls das mit deiner Delphi-Version bereits geht), denn damit sind dann auch Sortiermöglichkeiten gegeben. Die Sortierung fände dann in der Objektliste statt, das Stringgrid übernähme – so wie sich's gehört – lediglich die Darstellung.

Gehen wir davon aus, daß das StringGrid seine Größe mit der Formulargröße ändert, muß man natürlich die oben bereits angesprochene Seitengröße mit verändern. Das erfordert ein paar zusätzliche Algorithmen, ebenso wie die Darstellung nach einer Neusortierung.

Zu guter Letzt könnte man die Daten auch komplett in ein ClientDataset einlesen und über ein DBGrid anzeigen lassen.

p80286 6. Jan 2016 12:07

AW: Stringgrid teilweise befüllen?!
 
Zitat:

Zitat von st.w (Beitrag 1326111)
Die Idee, die Werte dynamisch zu holen ist sehr gut...

Aber wieviel Speicher braucht eine Stringgrid, die eine Spaltenanzahl von 150000 hat. Kann ich das auch mit D4 schon abfragen?

Das Stringgrid soll ja nicht alle Zeilen/Records anzeigen sondern nur die, die gerade auf dem Bildschirm/Formular Platz finden.
Also ungefähr so:
Delphi-Quellcode:
for i:=startrec to startrec+linestodisplay do
  mygrid.cells[1,i]:=myrecs[i].feld1;
Gruß
K-H

p80286 6. Jan 2016 12:11

AW: Stringgrid teilweise befüllen?!
 
Zitat:

Zitat von DeddyH (Beitrag 1326113)
Man sollte sich von dem Namen des Virtual Treeview nicht täuschen lassen, das Ding kann auch als Grid fungieren und gilt quasi als die eierlegende Wollmilchsau (und ist zudem OpenSource).

[edit]:lol:[/edit]

Gibt es denn irgendwo ein Tutorial, daß auch geistig eingeschränkten Menschen es ermöglicht, den virtualtreeview als "Grid" zu nutzen?:oops:

Gruß
K-H

DeddyH 6. Jan 2016 12:35

AW: Stringgrid teilweise befüllen?!
 
Ich kenne die aktuelle Version nicht, aber früher war da eine große Demo dabei, wo man gut spicken konnte, außerdem: http://www.delphipraxis.net/141465-v...eispielen.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.
Seite 1 von 2  1 2      

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