[Erledigt] Einzelne Zelle in TDBGrid ausblenden

Rund um die LCL und andere Komponenten
Antworten
MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

[Erledigt] Einzelne Zelle in TDBGrid ausblenden

Beitrag von MacWomble »

Ich brauche eure Hilfe, da ich mal wieder auf dem Schlauch stehe:

Ich habe ein DBGrid in welchem bei bestimmten Zeilen einzelne Zellen nicht angezeigt werden sollen.
Wo und wie kann ich diese abschalten?

Ich denke DrawColumnCell ist der richtige Ort, aber wo kann ich visible schalten?

Oder geht das eventuell gar nicht so einfach?
Zuletzt geändert von MacWomble am So 25. Mär 2018, 17:45, insgesamt 1-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Einzelne Zelle in TDBGrid ausblenden

Beitrag von MacWomble »

Da es vermutlich keine Lösung hierfür gibt, habe ich mein SQL mit IFs bestückt und gebe nun wo gewünscht "" aus der DB zurück.
Da es aber um formatierte Felder geht, bekomme ich nun 0,00 € angezeigt - anstelle eines Leerstrings. Wenn ich das Displayformat beim Feld leer lasse, erhalte ich entsprechend 0 anstelle von "".

Was ich aber benötige ist - je nach Datensatz (Zuordnung erfolgt über das Feld PosArt, welches 1,2 oder 3 sein kann)- eine der folgenden drei Varianten der Anzeige im DBGrid:
1. Feld ist leer
2. Feld hat Wert: 123,23 €
3. Feld hat Wert (123,23 €)

Hat hierzu eventuell jemand einen Vorschlag?
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Einzelne Zelle in TDBGrid ausblenden

Beitrag von wp_xyz »

Unabhängig von deinem Feld "PosArt" sollte hier eigentlich auch der dreiteilige Formatierungsstring funktionieren, mit jeweils einer Formatierung für positive, einer für negative Zahlen und einer für Null. Die Abschnitte werden durch ';' getrennt:

Code: Alles auswählen

  Dataset.FieldByName('x').DisplayFormat := '0.00" €";(0.00" €");""';

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Einzelne Zelle in TDBGrid ausblenden

Beitrag von MacWomble »

Danke für den Tipp. Ich werde das noch versuchen.

Im Moment habe ich es über die SQL-Abfrage hin bekommen, allerdings nicht sehr übersichtlich:

Die Leerzeilen habe ich hier nur eingefügt, weil es dann besser zu lesen ist:

Code: Alles auswählen

SELECT idauftragsposition, fk_auftrag, fk_posart, artikelgruppe, apo_position, apo_nummer, apo_name, apo_beschreibung, 
IF(fk_posart=2,"",apo_mengeneinheit) AS apo_mengeneinheit,
IF(fk_posart=2,"",apo_menge) AS apo_menge,
IF(fk_posart=2,"",apo_leistungsdatum) AS apo_leistungsdatum,
apo_mitarbeiter,
IF(fk_posart=2,"",concat(format(steuersatz,2,"DE_de"),IF(fk_posart<>2,"%",""))) AS steuersatz,
fk_color, colorn, colorh, colornfont, colorhfont,
 
IF(fk_posart=2,"",concat(IF(fk_posart=3,"(",""),format(round(apo_menge *(apo_lohn + apo_service +  apo_material + apo_geraet + apo_fremdleistung),2),2,"DE_de"),IF(fk_posart=1,"€",""),IF(fk_posart=3,"€)",""))) AS SNetto,
 
IF(fk_posart=2,"",concat(IF(fk_posart=3,"(",""),format(round(apo_menge *(apo_lohn + apo_service + apo_material + apo_geraet + apo_fremdleistung) * (Steuersatz/100),2),2,"DE_de"),IF(fk_posart=1,"€",""),IF(fk_posart=3,"€)","")))  AS SSteuer,
 
IF(fk_posart=2,"",concat(IF(fk_posart=3,"(",""),format(round(apo_menge *(apo_lohn +apo_service +  apo_material + apo_geraet + apo_fremdleistung) * (1+(Steuersatz/100)),2),2,"DE_de"),IF(fk_posart=1,"€",""),IF(fk_posart=3,"€)",""))) AS SBrutto,
 
IF(fk_posart=2,"",concat(IF(fk_posart=3,"(",""),format(round(apo_lohn + apo_service +  apo_material +apo_geraet + apo_fremdleistung,2),2,"DE_de"),IF(fk_posart=1,"€",""),IF(fk_posart=3,"€)",""))) AS EPNetto 
 
FROM AuftragsPositionen LEFT JOIN Steuersaetze ON  fk_steuersatz = idsteuersatz 
LEFT JOIN ArtikelGruppen ON fk_artikelgruppe=idartikelgruppe LEFT JOIN Colors ON idcolor = fk_color
 
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Antworten