![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: interbase
dbCheckbox und dbGrid mit Abfrage
Hallo
Über Checkboxen in DbGrids wurde schon viel geschrieben. Mein Quelltext bezieht sich auf den Tip bei about.com. Nur meine Umsetzung funktioniert nicht.
Delphi-Quellcode:
Es handelt sich um eine dreifeldrige Datentabelle, in welcher das erste Feld (Feld, siehe Quelltext) aus true und false besteht.
implementation
{$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin with Query1 do begin Active:=False; SQL.Clear; SQL.Add('Select * from Tabelle '); Active:=True; end; end; procedure TForm1.FormCreate(Sender: TObject); begin DBCheckBox1.DataSource := DataSource1; DBCheckBox1.DataField := 'Feld'; // DBCheckBox1.Visible := False; DBCheckBox1.Color := DBGrid1.Color; DBCheckBox1.Caption := ''; //explained later in the article DBCheckBox1.ValueChecked := 'true'; DBCheckBox1.ValueUnChecked := 'false'; end; procedure TForm1.DBGrid1DrawColumnCell( Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const IsChecked : array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); var DrawState: Integer; DrawRect: TRect; begin if (gdFocused in State) then begin if (Column.Field.FieldName = DBCheckBox1.DataField) then begin DBCheckBox1.Left := Rect.Left + DBGrid1.Left + 2; DBCheckBox1.Top := Rect.Top + DBGrid1.top + 2; DBCheckBox1.Width := Rect.Right - Rect.Left; DBCheckBox1.Height := Rect.Bottom - Rect.Top; DBCheckBox1.Visible := True; end end else begin if (Column.Field.FieldName = DBCheckBox1.DataField) then begin DrawRect:=Rect; InflateRect(DrawRect,-1,-1); DrawState := ISChecked[Column.Field.AsBoolean]; DBGrid1.Canvas.FillRect(Rect); DrawFrameControl(DBGrid1.Canvas.Handle, DrawRect, DFC_BUTTON, DrawState); end; end; end; procedure TForm1.DBGrid1ColExit(Sender: TObject); begin if DBGrid1.SelectedField.FieldName = DBCheckBox1.DataField then DBCheckBox1.Visible := False end; procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin if (key = Chr(9)) then Exit; if (DBGrid1.SelectedField.FieldName = DBCheckBox1.DataField) then begin DBCheckBox1.SetFocus; SendMessage(DBCheckBox1.Handle, WM_Char, word(Key), 0); end; end; procedure TForm1.DBCheckBox1Click(Sender: TObject); begin if DBCheckBox1.Checked then DBCheckBox1.Caption := DBCheckBox1.ValueChecked else DBCheckBox1.Caption := DBCheckBox1.ValueUnChecked; end; end. Ziel ist es: für jeden Datensatz eine editierbare vorbelegte Checkbox in dieses 'Feld' zu zeichnen. Die zu editierenden Datensätze sollen aus Abfragen der Datentabelle erzeugt werden und bei veränderung von true oder false über UPDATE zurückgeschrieben werden. Die DBCheckbox ist grau, zeigt aber den Zustand jeder Datenzeile (true mit Haken, false ohne Haken) an. Woran liegt es, daß keine Checkboxen in dem DBGrid gezeichnet werden? Danke. |
AW: dbCheckbox und dbGrid mit Abfrage
Zitat:
Oder anders gefragt: Wird deine DBGrid1DrawColumnCell-Methode eüberhaupt aufgerufen? Ach ja, die DBCheckBox1 muß natürlich vor/über dem DB-Grid liegen (am Einfachsten danach erstellt, bzw. in die Form eingefügt), damit es sich nicht hinter dem Grid versteckt. PS: Alles aus FormCreate kann auch direkt im OI zugewiesen werden, genauso wie das Meiste aus Button1Click. (abgesehn von dem
Delphi-Quellcode:
oder einem
Query1.Active := True;
Delphi-Quellcode:
)
Query1.Open;
|
AW: dbCheckbox und dbGrid mit Abfrage
Zitat:
Die dbcheckbox liegt derzeit neben dem Grid. Werde ich gleich ändern. Danke. |
AW: dbCheckbox und dbGrid mit Abfrage
Die Checkbox liegt mittlerweile auf dem Dbgrid. Beim Click auf einen Datensatz wird die Checkbox, wie vorher, aktualisiert. Ansonsten keine Änderung.
|
AW: dbCheckbox und dbGrid mit Abfrage
Liste der Anhänge anzeigen (Anzahl: 1)
Ich verwende für Datenbank-Anwendungen das TjvDBGrid aus den Jedi-Komponenten (Jvcl 3.48). Wenn dein zugrundeliegendes Dataset Boolean-Werte zuläßt, werden Boolean-Felder im TjvDBGrid stets wie gewünscht dargestellt: Als kleine Quadrate jeweils mit oder ohne Haken.
|
AW: dbCheckbox und dbGrid mit Abfrage
Zitat:
Kannst du mir weiterhelfen? |
AW: dbCheckbox und dbGrid mit Abfrage
Vermutlich wird der Boolean-Typ, den du (falls du einen) deklariert hast, nicht als solcher (an-)erkannt. Dazu müßte ich mehr über deine DB und dein Projekt wissen:
|
AW: dbCheckbox und dbGrid mit Abfrage
boolean Typ? Gibt es da mehrere Typen? Das ist doch nur wahr und falsch, 1 und 0 also etwas völlig gegensätzliches.
zu 1. Delphi 6 pro zu 2. Interbase Komponenten zu 3. Interbase Komponenten zu 4. varChar |
AW: dbCheckbox und dbGrid mit Abfrage
Leider kann ich dir hier nicht weiterhelfen, da mir weder Delphi 6 pro noch die Interbase-Komponenten in der damaligen Ausführung geläufig sind. Um zu testen, ob deine Firebird-Boolean-Deklaration funktioniert, kannst du einfach folgendes probieren:
Delphi-Quellcode:
Um in Zukunft zu vermeiden, daß dir Forenuser zu Hilfe eilen, die deine Delphi-Version nicht kennen, wäre es angebracht, in deinem Profil deine Delphi-Version einzutragen.
Function FirebirdBooleanTest(Const BooleanField : TField) : Boolean;
Begin Result := BooleanField.AsBoolean; End; |
AW: dbCheckbox und dbGrid mit Abfrage
Früher hatte ich ein DB-Grid von Scalabium benutzt. Das
![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:05 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 by Thomas Breitkreuz