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?
[Erledigt] Einzelne Zelle in TDBGrid ausblenden
-
- 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
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.
-
- 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
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?
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.
Re: Einzelne Zelle in TDBGrid ausblenden
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" €");""';
-
- 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
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:
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.