StringGrid Datendarstellung als Baumstruktur

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

StringGrid Datendarstellung als Baumstruktur

Beitrag von Bernie110 »

Hallo Zusammen,

ich beschäftige mich seit ein paar Tagen mit dem StringGrid.
Es mit SQL Daten zu befüllen klappt bereits.

Nun kam mir die Idee, mit einem StringGrid auch eine Baumstruktur darzustellen.
Ich stell mir das so vor.

Die Hauptzeile soll Summendaten beinhalten.
Etwas weiter darunter sollen dann die einzelnen Einträge erscheinen.
In etwa so :

1Head Überschirift : ____Niederlassung Anzahl Mitarbeiter Anzahl Abteilungen
________________Hamburg____2____________2
Child Überschift__________________Name Mitabreiter Abteilung
________________ ___________Max Mustermann Vertrieb
________________ ___________Anna Mustermann Buachhaltung
2Head Überschirift : ____Niederlassung Anzahl Mitarbeiter Anzahl Abteilungen
________________Berlin____1____________1
Child Überschift__________________Name Mitabreiter Abteilung
________________ ___________Klaus Mustermann Vertrieb
usw..

Eine Treeview möchte ich nicht.

Hab mich schon etwas informiert und nichts auf die schnelle gefunden.
Kann man so etwas mit einem String Grid darstellen ?
Jemand einen Tip ?

danke für euer Antworten
Lg Bernie

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: StringGrid Datendarstellung als Baumstruktur

Beitrag von Bernie110 »

Hallo nochmals..
hab jetzt einfach mal ausprobiert und bekomme auch ein Ergebnis

Bild

Ich habs so gemacht :

Code: Alles auswählen

procedure TFrm_TBL_UEBERSICHT.DBGrid1_Aktualisieren;
var
  s : String;
  s2 : String;
  s3 : String;
  i: integer;
  i2 : integer;

begin
     s :=  'select * from v_TBL_UEBERSICHT '
        +  ' ; ';

     SQLQuery1.Close;
     SQLQuery1.SQL.Clear;
     SQLQuery1.SQL.ADD(s);
     SQLQuery1.Open;
     SQLQuery1.Last;

       s2 :=  'select * from STAMM_TABELLEN_FELD_NAMEN '
          +  ' ; ';

     SQLQuery2.Close;
     SQLQuery2.SQL.Clear;
     SQLQuery2.SQL.ADD(s2);
     SQLQuery2.Open;
     SQLQuery2.Last;

     //Gesamtanzahl der Rows
     StringGrid1.RowCount := SQLQuery1.RecordCount + 1 + SQLQuery2.RecordCount + 200;
     SQLQuery1.first;
     SQLQuery2.Close;
     i := 0;

     while not SQLQuery1.Eof do begin
     i := i + 1;
     StringGrid1.Cells[0,i] := SQLquery1.FieldByName('TBL_NAMEN_ID').AsString;
     StringGrid1.Cells[1,i] := SQLquery1.FieldByName('TBL_NAMEN_NAME_DATENBANK').AsString;
     StringGrid1.Cells[2,i] := SQLquery1.FieldByName('TBL_NAMEN_CODE').AsString;
     StringGrid1.Cells[3,i] := SQLquery1.FieldByName('TBL_NAMEN_Bez').AsString;
     StringGrid1.Cells[4,i] := SQLquery1.FieldByName('AnzFelder').AsString;

     // hier bräuchte ich eine neue Zeile für die Überschrift der folgenden Daten
     //StringGrid1.Cells[3,i] := 'FELD NAME';
     //StringGrid1.Cells[4,i] := 'FELD TYP';

          s3 :=  'select * from STAMM_TABELLEN_FELD_NAMEN '
              +  ' WHERE TBL_FELD_TBL_NAMEN_ID = '''+SQLquery1.FieldByName('TBL_NAMEN_ID').AsString+''' ; ';

             SQLQuery3.Close;
             SQLQuery3.SQL.Clear;
             SQLQuery3.SQL.ADD(s3);
             SQLQuery3.Open;
             SQLQuery3.First;

             for i2 := 0 to SQLquery1.FieldByName('AnzFelder').asInteger + 1 do begin

                     i := i + 1;
                     StringGrid1.Cells[3,i] := SQLquery3.FieldByName('TBL_FELD_NAME').AsString;
                     StringGrid1.Cells[4,i] := SQLquery3.FieldByName('TBL_FELD_TYP').AsString;
                     SQLquery3.Next;

             end;
     SQLquery1.Next;

     end;
end;
Geht bestimmt auch anders ?
Hatte mir auch schon überlegt ob man nicht gleich alles in eine Abfrage packt.
Wie würdet ihr das machen ?
Lg Bernie

Benutzeravatar
gladio
Beiträge: 132
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: StringGrid Datendarstellung als Baumstruktur

Beitrag von gladio »

Für sowas würde ich einen Report erstellen.

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: StringGrid Datendarstellung als Baumstruktur

Beitrag von Bernie110 »

gladio hat geschrieben:
Sa 23. Jan 2021, 18:37
Für sowas würde ich einen Report erstellen.
Reports benutze ich eigentlich nur für Ausdrucke oder zur Weiterleitung.
Um schnell Übersicht auf meine FIlterergebnisse zu haben möchte ich ehrlich gesagt auf Reports zur Ansicht verzichten.
Lg

Soner
Beiträge: 427
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: StringGrid Datendarstellung als Baumstruktur

Beitrag von Soner »

Ja, du kannst Mit StringGrid Baumstrukturen leicht darstellen. Ich habe es früher öfters verwendet. Ich habe ein Beispiel nach deiner Frage erstellt.
Das Beispiel enhält auch Spaltenverschmelzung(Colspan), siehe Maschaftsnamen.
Ich habe für Mitarbeiter Manschaften genommen, als Abteilungen Sportarten und die Städte sind Niederlassungen.
Mann könnte es erfahren in dem man mit Mausklick alle Zeilen einer Abteilung versteckt. Was das für ein Zeilentype ist, kann man aus der ersten Spalte entfernen. In der Objekt-Eigenschaft dieser Spalte kannst du alle deiner Verwaltungsvariablen, wie Index in der DB usw. verstecken.
Bildschirmfoto
Bildschirmfoto
scr2.jpg (40.99 KiB) 285 mal betrachtet
Dateianhänge
SGridColspanDemo.zip
Beispielprogramm
(124.95 KiB) 16-mal heruntergeladen

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: StringGrid Datendarstellung als Baumstruktur

Beitrag von Bernie110 »

Soner hat geschrieben:
So 24. Jan 2021, 16:01
Ja, du kannst Mit StringGrid Baumstrukturen leicht darstellen. Ich habe es früher öfters verwendet. Ich habe ein Beispiel nach deiner Frage erstellt.
Das Beispiel enhält auch Spaltenverschmelzung(Colspan), siehe Maschaftsnamen.
Ich habe für Mitarbeiter Manschaften genommen, als Abteilungen Sportarten und die Städte sind Niederlassungen.
Mann könnte es erfahren in dem man mit Mausklick alle Zeilen einer Abteilung versteckt. Was das für ein Zeilentype ist, kann man aus der ersten Spalte entfernen. In der Objekt-Eigenschaft dieser Spalte kannst du alle deiner Verwaltungsvariablen, wie Index in der DB usw. verstecken.
scr2.jpg
Hi Soner herzlichen Dank !!!!
Das hilft mir wahnsinnig weiter !!!..
Jetzt check ich auch wie man das mit den Fraben macht. :roll:
Wie versteckt man Zeilen ?
Ich hätte es mit mehreren Abfragen gemacht :)
Lg Bernie

Soner
Beiträge: 427
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: StringGrid Datendarstellung als Baumstruktur

Beitrag von Soner »

Gerne geschehen.
Die Zeilen kannst du verstecken mit :
StringGrid1.RowHeights[Zeilennr]:=0;

Du kannst die Tabelle auch mit zwei Abfragen füllen, das nennt man bei Datenbanken Master/Slave-Tabellen.

Ich würde in deiner Stelle die "Head"- und "Child"-Überschriften in die Titelzeile(Fixedrows) von Stringgrid plazieren, das ist übersichtlicher, siehe:
Bildschirmvorschau von 2.Beispiel
Bildschirmvorschau von 2.Beispiel
scr3.jpg (27.02 KiB) 253 mal betrachtet
Schau mal bei Berlin, ich habe Treeview-Funktion erstellt, wenn man auf die zweite Spalte klickt, dann öffnet oder schließt es sich. Da wo - oder + ist klicken.

Quelltext liegt bei.
Vielleicht solltest du Virtualtreeview verwenden, es hat schon diese Funktionen. Aber zum Programmieren oder LCL-Lernen ist das hier nicht schlecht.
Viel Spaß.
Dateianhänge
sgridtreecolspan.zip
Stringgridtreecolspan-demo2
(125.33 KiB) 15-mal heruntergeladen

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: StringGrid Datendarstellung als Baumstruktur

Beitrag von Bernie110 »

Soner hat geschrieben:
So 24. Jan 2021, 18:18
Vielleicht solltest du Virtualtreeview verwenden, es hat schon diese Funktionen. Aber zum Programmieren oder LCL-Lernen ist das hier nicht schlecht.
Viel Spaß.
Hallo Soner herzlichen Dank nochmal...
damit hast du mir jetzt alle Fragen vorserst beantwortet ! Merci Merci Merci !!
Ja ich möchte ersteinmal das StringGrid und die Möglichkeiten verstehen.
Und mit deinen Beispielen macht es gleich mehr spass.
Dass man den Zellen Schlüssel mit gibt die man dann zur Farbgebung oder eben für
die PlusMinus Geschichte benutzt, wäre ich so ersteinmal nicht gekommen :-)
Lg Bernie

Antworten