AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Grid mit gruppierter Darstellung
Thema durchsuchen
Ansicht
Themen-Optionen

Grid mit gruppierter Darstellung

Ein Thema von NetSonic · begonnen am 26. Nov 2009 · letzter Beitrag vom 30. Nov 2009
Antwort Antwort
Seite 1 von 3  1 23      
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Grid mit gruppierter Darstellung

  Alt 26. Nov 2009, 12:28
Datenbank: PostgreSQL • Version: 8.3 • Zugriff über: ZeosLib
Hallo liebe Delphi-Kollegen,

mir fehlt vielleicht auch einfach nur die richtige Formulierung um bei der Forensuche das richtige Ergebnis zu bekommen oder ich habs überlesen - jedenfalls möchte ich folgendes realisieren:

Ich hole mir aus zwei Tabellen meiner Datenbank Ergebnismengen. Beide Tabellen miteinander Verknüpft.
Aus Tabelle A hole ich mir Name und ID. Aus Tabelle B Länge, Breite, Höhe etc. mit Bezug auf die ID aus Tabelle A. Das ganze möchte ich dann "gruppiert" in einer DBGrid oder eben einer entsprechenden Komponente wie folgt dargestellt haben:

Delphi-Quellcode:
+ "Testobjekt A"
  - Länge - Breite - Höhe
  - Länge - Breite - Höhe
+ "Testobjekt B"
  - Länge - Breite - Höhe
+ "Testobjekt C"
  - Länge - Breite - Höhe
  - Länge - Breite - Höhe
  - Länge - Breite - Höhe
Wie kann man solch eine Darstellung am einfachsten umsetzen?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Grid mit gruppierter Darstellung

  Alt 26. Nov 2009, 12:42
Hallo,

DBGrid
Dann musst du dir den SQL-Befehl schon so zusammenbauen
-> Case, Stored Procedure

DBGrid / TClientDataSet
Dort könnte man eine Tabelle so anlegen,
wie sie im DBGrid angezeigt wird
Die füllst du dann "per Hand"

StringGrid
Hier kannst du das Einfügen selber machen
Ich mache bei den Gruppen immer

Name-Spalte
[Gruppe1]
Inhalt 1
Inhalt 2
// Leerzeile
[Gruppe2]


Heiko
Heiko
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#3

Re: Grid mit gruppierter Darstellung

  Alt 26. Nov 2009, 12:51
Wenn's Geld kosten darf:
ExpressQuantumGrid Suite von Developer Express.
siehe Screenshot ganz unten auf der Seite
  Mit Zitat antworten Zitat
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#4

Re: Grid mit gruppierter Darstellung

  Alt 26. Nov 2009, 13:00
Zitat von KrasserChecker:
Wenn's Geld kosten darf:
ExpressQuantumGrid Suite von Developer Express.
siehe Screenshot ganz unten auf der Seite
So wie auf dem Screenshot wäre natürlich traumhaft aber kann man das auch mit freien Komponenten realisieren? Geht sowas ner VirtualStringGrid??? Habe damit noch nie gearbeitet...
  Mit Zitat antworten Zitat
Mike_on_Tour

Registriert seit: 16. Aug 2007
195 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Grid mit gruppierter Darstellung

  Alt 26. Nov 2009, 13:37
Hallo,

eine freie Komponente ist z.B. das SMDBGrid (SMDBGrid von Scalabium). Die Gruppierung von Daten ist zwar nicht groß dokumentiert, aber es funktioniert mit kleinen Tricks. Ich habe gerade mal einen kleinen Test gemacht, da ich die Gruppierung auch noch einsetzen will.

Mike
Programmieren ist wie das Wandeln auf dem schmalen Pfad zwischen Wahnsinn und Intelligenz.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Grid mit gruppierter Darstellung

  Alt 26. Nov 2009, 14:31
Zitat von NetSonic:
Geht sowas ner VirtualStringGrid???
Ganz nah dran. Ein VirtualStringTree macht das für lau.
Das fällt zwar nicht in die Kategorie "am einfachsten" bietet aber fast alle Möglichkeiten
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#7

Re: Grid mit gruppierter Darstellung

  Alt 26. Nov 2009, 14:50
OK, danke für die Tipps. Ich werde mich mal damit auseinandersetzen und mich ggf. wieder melden, wenn ich Probleme habe...

NetSonic
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Grid mit gruppierter Darstellung

  Alt 26. Nov 2009, 14:59
Hall0,

Zitat:
Ganz nah dran. Smile Ein VirtualStringTree macht das für lau.
Beweise, Screenshots ...
Und bitte nicht auf die Galerie verweisen.

Oder meinst du die TreeView/ListView Kombination,
das wäre in der Tat sowas wie Grouping.


Heiko
Heiko
  Mit Zitat antworten Zitat
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#9

Re: Grid mit gruppierter Darstellung

  Alt 26. Nov 2009, 15:15
@Mike: Kannst Du mir das kurz Hilfestellung zwecks Gruppierung geben? Ich habe die Komponente bereits installiert und auch in mein Programm eingebunden. Die "normalen" Daten werden auch angezeigt. Aber wo muss ich jetzt ansetzen??? Ich habe zwar die Eigenschaft "Grouping" gefunden, aber was muss ich dann im Feld "Expression" eingeben???

NetSonic
  Mit Zitat antworten Zitat
Mike_on_Tour

Registriert seit: 16. Aug 2007
195 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Grid mit gruppierter Darstellung

  Alt 26. Nov 2009, 15:45
Zitat von NetSonic:
@Mike: Kannst Du mir das kurz Hilfestellung zwecks Gruppierung geben? ... Ich habe zwar die Eigenschaft "Grouping" gefunden, aber was muss ich dann im Feld "Expression" eingeben???
NetSonic
OK, ich versuchs mal.

Du hast ja sicher eine Query-Komponente. Dort mußt Du die SELECT-Anweisung so erweitern:
SQL-Code:
SELECT *, 2 as flag
FROM tabelle
WHERE (bedingung)

UNION ALL

SELECT DISTINCT *, 1 as flag
FROM tabelle
WHERE (bedingung)

ORDER BY feldname, flag
Zur Erklärung: Du mußt die SQL-Anweisung mit einer 'UNION' "verdoppeln". Dabei darf das zweite SELECT nur einen Datensatz pro Gruppe ergeben, deshalb das 'DISTINCT' unbedingt angeben. In jedem SELECT muß noch ein Kennzeichen angegeben werden (ich habe das als 'flag' bezeichnet). Alle Gruppenzeilen bekommen als 'flag' den Wert 1 und alle Datenzeilen zur Gruppe den Wert 2. Mit ORDER BY läßt sich das dann noch sortieren.

Dann legt Du in der Eigenschaft 'Grouping' einen Eintrag an und trägst bei Expression 'flag' ein.
Für das Event 'OnExpression' trägst Du folgenden Code ein:
Delphi-Quellcode:
if (Query1.FieldByName(Expression).AsInteger = 1)
  then begin
    Value := True;
    Text := 'Gruppenüberschrift: ' + Query1.FieldByName('feldname').AsString;
  end;
Zur Erklärung: Im Parameter 'Expression' wird der Eintrag aus der Grouping-Eigenschaft übergeben (automatisch). Im Parameter 'Text' übergibst Du einfach das, was in der Gruppenzeile stehen soll.

Die Ausgabe der Gruppenzeile kannst bzw. mußt Du im Event 'OnDrawGroupingCell' steuern:
Delphi-Quellcode:
DefaultDrawing := False;

ACanvas.Brush.Color := Group.Color;
ACanvas.Font.Assign(Group.Font);
ACanvas.FillRect(CellRect);

CellRect.Left := CellRect.Left + 4;
CellRect.Top := CellRect.Top + 2;
DrawText(ACanvas.Handle, PChar(Text), Length(Text), CellRect, DT_LEFT or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX or DT_VCENTER)
Zur Erklärung: In meinem Test wird die Gruppenzeile rechtsbündig ausgegeben. Offensichtlich wird dafür die Einstellung der ersten Spalte des Grids übernommen. Ich habe deshalb das Zeichnen selbst übernommen und die Gruppenzeile linksbündig angezeigt.

Mehr habe ich erst mal nicht getestet, da ich für meine Gruppierung noch nicht so weit bin. Es geht vielleicht auch noch etwas einfacher, aber als Anfang sollte es erst mal reichen.

Mike
Programmieren ist wie das Wandeln auf dem schmalen Pfad zwischen Wahnsinn und Intelligenz.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 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