![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: BDE
Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
Hallo,
mein Erfolg mit meiner letzten Frage macht mir Mut, eine weitere, mir schon lange auf der Seele liegende Frage mit Eurer Hilfe zu klären: DBGrid-Komponente lässt viele Wünsche offen; insbesondere kann man Controls nicht gut unterbringen. Daher will ich alternativ DBCtrlGrid einsetzen, was aber auch leider nicht alles unterstützt (ganz normale Schalter z.B. oder DBLookUpCombos... Jetzt möchte ich Zeilen einfärben, wenn ein Datensatz einen bestimmten Wert enthält. Es gibt aber nur die Möglichkeit, mit der Eigenschaft "SelectedColor" die Farbe des aktuellen Datensatzes zu setzen. Irre ich mich? Wie kann ich vorgehen? Gibt es eine handhabbare Alternative (eine Gridkomponente, die mehr kann, aber bei der nicht gleich 10000e von Programmzeilen eingebunden werden müssen, die auch gepflegt werden wollen, ich habe mit einigen Gridherstellern schon einschlägige Erfahrung)? |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
Zitat:
Delphi-Quellcode:
marabu
procedure TMainForm.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if Table.FieldByName('KONTOSTAND').AsInteger < 0 then DBGrid.Canvas.Brush.Color := clRed else DBGrid.Canvas.Brush.Color := clWhite; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
So ungefähr könnte das gehen. Ich arbeite ja aus den genannten Gründen jetzt mit DBCtrlGrid statt mit DBGrid. Dort gibt es die Routine PaintPanel, die die Funktion von deiner DefaultDrawColumnCell übernehmen könnte. Die hat jedoch zum Aufruf keine ausreichende Sichtbarkeit. Ich muss also erst eine neue, von DBCtrlGrid geerbte Komponente schaffen, in der ich die Sichtbarkeit von PaintPanel von Protected auf Public setze. Dann müsste es gehen. Leider stürzt mir derzeit bei der Zuweisung einer Datenquelle zur neuen Komponente Delphi 7 ab. Da muss ich jetzt weiter forschen. Einen einfacheren Weg gibt es wohl nicht?
|
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
über die paintPanel-Methode von TDBCtrlGrid habe ich keinen Erfolg. Zunächst klappt das ja auch mit allen Datensätzen: diese werden entsprechend dem Inhalt eingefärbt. Leider wird dann aber der selektierte Datensatz mit der Farbe des letzten Datensatzes gefärbt, ohne dass ich darauf Einfluss nehmen könnte. Die Routine wird zu verschiedenen Zeitpunkten aufgerufen, zum Schluss aber zeichnet "irgendjemand" nochmal mit der offenbar zuletzt verwendeten Farbe. Ich komme da einfach nicht ran! :wall:
|
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
wenns was kosten darf
würde ich dir devexpress ans herz legen. alles andere ist unwirtschaftlich. |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
natürlich sollte das möglichst nichts kosten...
zudem habe ich keine guten Erfahrungen mit derartigen Komponenten, weil die Einarbeitung in keinem Verhältnis zum Erfolg steht. Was kostets' denn und wo gibts das? |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
Zitat:
|
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
kosten sind natürlich unterschiedlich.
und erzähl mir nix vom pferd. die komponenten kauft man ja nicht nur um bissl bunt rumzumalen. er hat oben auch controls im grid gesprochen. ![]() hier ist ne demo ~7MB kannst du mal reinschauen obs sich nicht doch lohnt. trotzdem vielen dank hansa für dein unqualifiziertes kommentar. |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
Ich weiss nicht warum Ihr Euch alle so aufregt
so gehts doch wunderbar
Delphi-Quellcode:
das färbt das 4te !! Panel zuverlässig rot
procedure TRechnung.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid;
Index: Integer); begin if DBCtrlGrid.DataSource.DataSet.FieldByName('zeilenNo').AsInteger = 3 then DBCtrlGrid.Color := clred else DBCtrlGrid.Color := clBtnFace; end; end. mfg wo |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
Zitat:
Anforderungen : 1. Bei Eingabe von Daten 1-3 Zeilen der Bezeichnung, Adresse usw. anzeigen. Also in Abhängigkeit von den bestückten DB-Feldern. Ist nur eines da, dann Anzeige : 1 Zeile. Sind 3 da und das 1. und 3. haben einen Wert, dann muß die 2. Zeile angezeigt werden, obwohl sie leer ist. Es geht jeweils um einen DS (Datensatz) und zwar gemischt 1-3 Zeilen !! 2. Zahlen-Formatierung : rechtsbündig anzeigen / eingeben mit definierten Nachkommastellen bei reals. 3. Kennzeichnung im Grid pro Zelle. D.h. in Spalte 4 könnte "Storno" stehen aber nur kleiner Kasten innerhalb der Zelle und farblich mit weiß auf rot. In Spalte 1 könnte stehen : "Scan" Das soll dann weiß auf schwarz klein unten links in der Zelle stehen. Habe das mit dem vorhandenen StringGrid gemacht. Einfach das OndrawCell umgebaut. Ansonsten sieht die Realität so aus : 2 Wochen suchen nach geigneten Komonenten/Installation, keine Testversion usw. 2 Wochen testen. Bei Fragen keine Antwort, bzw. langsam. Umstieg auf Stringgrid, Programm umgebaut usw. : 1 Woche. Die DB-Komponenten sind IMHO einfach zu schwach und unflexibel, egal ob von Borland oder sonst einem. |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
@Hansa:
Nur mal als Diskussionsgrundlage: Ich meine alle von Dir beschriebenen Features müssten auch mit einem normalen DBGrid gehen Auch da kann man Ownerdraw benutzen. Da auch die Zeilenhöhe veränderbar ist (wenn auch nur sehr eingeschränkt und nur für alle Zellen müsste das auch 3 Zeilen in einer Zelle anzeigen können. Für die Eingabe kann zusätzlich der InPlaceEditor umgeladen werden. Man würde sich so die Zuordung Daten Datensatz sparen mfg wo |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
Die Zeilenhöhe zu ändern, das ist auch nichts. Dann kommen noch WordWrap und so Zeug ins Spiel. Im Endeffekt ergibt das ein Programm, das komisch aussieht, keiner mehr versteht. Ich werde mal schnell ein Beispiel-Screenshot machen. Und dann soll mir jemand sagen, welche Fremdkomponente das hinkriegt, allerdings mit minimalem Aufwand.
Edit : zu Fremdkomponenten zähle ich auch das Delphi-DBGrid. |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
Liste der Anhänge anzeigen (Anzahl: 1)
Wehe, wenn das hier einer "pushen" nennt. 8) Der Anhang wäre wohl untergegangen. Jetzt sage mir mal einer, mit welcher Komponente so was zu machen ist ! Und zwar mit vertretbarem (Lern)aufwand !! Die muß auch nicht kostenlos sein.
|
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
:? Hallo Hansa
Deine Lösung finde ich sehr interessant, ich hätte aber eventuell doch ein DBGrid genommen und mit einer StoredProcedure ähnlich wie die folgende verwendet:
SQL-Code:
Sowas kann 1 bis n Zeilen zurückliefern, abhägig vom Inhalt.
CREATE PROCEDURE SP_TEST2
RETURNS ( ZEILEMOD VARCHAR(50)) AS DECLARE VARIABLE AVAR VARCHAR(50); begin for Select Beschreibung from zeilen into :avar do begin zeilemod = avar; suspend; zeilemod = 'Leere Zeile'; suspend; zeilemod = 'Weitere Zeile'; suspend; end end :) Aber: Never change a running system - also nix ändern Gruß wo |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
Zitat:
|
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
@Hansa
sehr interessant, eure Diskussion... Aber zurück zu meinem Problem: Resultat deines Vorschlags ist ein heftiges Flackern und unschöne Seiteneffekte auf andere Controls. Auch will ich nur ein Feld einfärben, so dass der Fall bei mir so aussieht: [delphi] if Datasource1.dataset.fieldByName('Ergebnis').asFloa t > 10 then DBEdit6.Color:=clRed else DBEdit6.Color:=clGreen; Das Bild sieht auch fast gut aus: ![]() Das Problem ist nur, im selektierten Datensatz ist die Farbe so wie im zuletzt dargestellten Datensatz. Das kann ich ihm nicht abgewöhnen Gruß Schiller |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
Hallo,
ich benötige ebenfalls ein ähnliches Verhalten in einem Grids. Weder bei den TMS noch beim QuantumGrid von DevExpress konnte ich etwas in diese Richtung finden. Also doch selber machen? :roll: |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
nein.
bei devExpress Tableview gibt es das event: OnGetContentStyle schau dir dieses event mal an, du solltest alles darüber steurn können. |
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
Ok Danke, werde ich mir mal anschauen.
|
Re: Einfärben von DBCtrlGrid-Zeilen aufgrund von Inhalten
Ich habe inzwischen die Lösung zu 98%, um in Abhängigkeit vom Datensatzinhalt die Eigenschaft Farbe des DBEdit-Controls auch im selektierten Datensatz zu setzen:
Ich setze die Eigenschaft nicht nur in der PaintPanel-Methode des DBCtrlGrid, sondern auch im TableAfterScroll- und FormPaint-Ereignis (wegen Resize). Gelegentlich findet das Programm aber immer noch nicht die richtige Farbe (daher der 2% Rest). Danke für Eure Tipps! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz