Bearbeiten und Anzeigen von Booleschen Feldern mithilfe eines Kontrollkästchens in Delphis DBGrid

Tipp von Rene van der Heijden

In einer Reihe von Artikeln mit dem Titel Hinzufügen von Komponenten zu einem DBGrid wird erläutert, wie Sie nahezu jedes Delphi-Steuerelement (visuelle Komponente) in eine Zelle eines DGBrid einfügen. Die Idee ist, optisch attraktivere Benutzeroberflächen zum Bearbeiten von Feldern in einem DBGrid zu erstellen: eine ComboBox für Dropdown-Listen; ein DateTimePicker (Kalender) für Datumswerte; ein Kontrollkästchen für Boolesche Felder.

Kontrollkästchen für Boolesche Felder

CheckBox in einem DBGrid

Wie von Rene van der Heijden bemerkt, ist die Lösung ziemlich langwierig und funktioniert nicht, zumindest nicht, wenn Sie mit der Maus auf die Kontrollkästchen klicken.

Rene schlägt einen einfacheren Ansatz vor, für den nur zwei gerade Handler erforderlich sind: OnCellClick und OnCustomDrawCell für Ihr DBGrid-Steuerelement:

 // OnCellClik-Ereignis eines DBGrid1 Verfahren TForm.DBGrid1CellClick(Spalte: TColumn); Start   wenn (Column.Field.DataType = ftBoolean) dann   Start     Wahr und Falsch umschalten     Column.Grid.DataSource.DataSet.Edit; Column.Field.Value: = nicht Column.Field.AsBoolean;    sofortiger Post - sehen Sie selbst, ob Sie das wollen     Column.Grid.DataSource.DataSet.Post;     Sie können hier zusätzliche Funktionen hinzufügen, die nach der Änderung verarbeitet werden sollen   Ende; Ende; // OnDrawColumnCell-Ereignis eines DBGrid1 Verfahren TForm.DBGrid1DrawColumnCell (Absender: TObject;   const Rect: TRect; DataCol: Integer; Spalte: TColumn; Zustand: TGridDrawState); const   CtrlState: Array[Boolean] von Ganzzahl = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK oder DFCS_CHECKED); Start   wenn (Column.Field.DataType = ftBoolean) dann   Start     DBGrid1.Canvas.FillRect (Rect);     wenn VarIsNull (Column.Field.Value) dann       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK oder DFCS_INACTIVE) grau     sonst       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, CtrlState [Column.Field.AsBoolean]); markiert oder nicht markiert   Ende; Ende; 

Delphi Tips Navigator:
"Entfernen Sie doppelte Elemente in Delphis TStringList
"5 Fakten, die Sie nicht über Delphi und Klassen und die VCL und Vererbung und benutzerdefinierte Steuerelemente wussten und ...