![]() |
Kollison OnDrawColumnCell und Anzeige in DBText
so ich hoffe mal mir kann hier geholfen werden *hoff hoff* .
folgendes problem: ich habe eine dbgrid mit ner menge daten drin. je nachdem welchen wert ein bestimmtes datenfeld hat wird die textfarbe in dieser zeile verändert. gleichzeitig ist es aber notwendig beim wechsel das datensatzes in der tabelle die daten in dbtext-feldern außerhalb der dbgrid anzeigen zu lassen... nur genau das funktioniert nicht, wenn ondrawcolumncell verwendet wird. beim wechsel wird einfach nichts angezeigt. wie kann ich das umgehen oder anders lösen? :gruebel: |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
hallo cs_ii!
zunächst mal ein willkommen im forum! :hello: Zitat:
poste mal den sourcecode vom felderanmalen... mfg, stefan |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
hallihallo stefan!
tja ich hab mal einen bekannten programmierer gefragt, der meinte, so geht das nich, weil ondrawcolumncell ständig erneut aufgerufen wird und die datenbankkomponenten da nicht hinterher kommen. ich versteh es auch nicht so recht :wiejetzt: hier ist der quelltext: if Column.FieldName = 'Code' then begin if Table1.FieldByName('Codec').AsString = 'DivX' then Column.Font.Color := clred else if Table1.FieldByName('Codec').AsString = 'SVCD' then Column.Font.Color := clnavy else if Table1.FieldByName('Codec').AsString = 'VCD' then Column.Font.Color := clpurple; vielleicht hat ja doch jemand eine lösung !? mfg, claudia |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
hallo claudia!
versuchs mal so:
Delphi-Quellcode:
bei der obigen lösung darfst du aber die spalte nicht verschieben ;)
procedure DBGrid1.DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); var aValue: string; begin if (gdSelected in State) or (gdFocused in State) then exit; if Column.Index = 3 then begin {nummer der spalte im dbgrid} aValue:= Column.Field.asString; {suchbegriff auslesen} if aValue = 'SVCD' then begin DBGrid1.Canvas.Brush.Color := clBlue; DBGrid1.Canvas.Font.Color := clYellow end else begin DBGrid1.Canvas.Brush.Color := clPurple; DBGrid1.Canvas.Font.Color := clWhite end; DBGRid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; besser:
Delphi-Quellcode:
dann bleibt die reihenfolge der spalten im dbgrid egal.
if Column.Fieldname = 'Codec' then begin
zu der anzeige im dbedit-feld kann ich mich nur wiederholen... sobald das dbgrid und das dbedit-feld an der gleichen datasource hängen, dann aktualisiert es sich selbständig. schau mal lieber nochmal nach, was du in deinem dbedit-feld als datasource eingetragen hast :gruebel: liebe grüsse & gutes gelingen stefan |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
ich werde deinen quelltext mal ausprobieren. aber das einfärben hat auch mit meinem geklappt...
zur anzeige in dbtext: wenn ich den quellcode in dem ereignis ausklammer werden die daten angezeigt. also kann es nich an der verknpüfung über datasource mit der db liegen. mir is das alles sehr sehr schleierhaft! :x |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
hallo claudia!
Zitat:
nachdem sich der fehler nicht zeigt, wenn du ihn ausklammerst, muss darin irgendwas schieflaufen. kopierst ihn ins forum und schauen wir ihn uns gemeinsam an? ;) mfg, stefan |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
der text in dem ereignis ist der, der in meinem ersten beitrag steht.
aber hier is er nochmal :lol: : if Column.FieldName = 'Code' then begin if Table1.FieldByName('Codec').AsString = 'DivX' then Column.Font.Color := clred else if Table1.FieldByName('Codec').AsString = 'SVCD' then Column.Font.Color := clnavy else if Table1.FieldByName('Codec').AsString = 'VCD' then Column.Font.Color := clpurple; hab deinen ausprobiert, aber der macht nich genau das was ich möchte... ich versuch ihn morgen mal umzumodeln um zu sehen obs dann funktioniert... :coder: bis dahin |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
hallo claudia!
so schnell liest man sich wieder ;) Zitat:
Zitat:
Zitat:
bei deiner variante könnte ich mir vorstellen, dass die färbliche markierung beim nächsten OnDrawColumnCell-ereignis wieder rückgängig gemacht wird, bzw das grid den text weiss auf weiss darstellt, da sie immer nur die aktuelle zelle betrachtet und nicht das ganze datengitter. Zitat:
man liest sich? :mrgreen: stefan |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
hallöchen stefan!
also nochmal das ganze: in der dbgrid werden die farben definitv richtig gemacht so wie ich das programmiert habe. nur leider werden dann die daten beim wechsel das satzes in der dbgrid in den dbtext-feldern nicht richtig aktualisiert. ich könnte mir jetz nur vorstellen dass es daran liegt, dass ich bei Ondrawcolumncell auf die db über "table1.fieldbyname..." zugreife. ich hatte deinen code kopiert und er hat mir alles die gleiche farbe gemacht... dann hab ich ihn ein wenig geändert, aber auch da ging es nicht. ich habe heute zeit und werde mir die sache nochmal ansehen... irgendwie muss das doch zu lösen sein *grummel*!!! :wall: |
Re: Kollison OnDrawColumnCell und Anzeige in DBText
hallo claudia!
so, jetzt bin ich wieder am laufenden ;) ich kann dich beruhigen, der feldzugriff mittels FieldByName in der procedure OnDrawColumnCell ist sicherlich nicht schuld daran, dass die dbedit-felder nicht aktualisiert werden. nachdem die aufklärung des phänomens im forum etwas mühsam ist, mach ich dir den vorschlag, mir den quellcode, mittels pm, zu schicken. dann seh ich mir das mal aus der nähe an. apropos... welche delphi-version verwendest du eigentlich? lg, stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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