Modifica e visualizza i campi booleani usando un CheckBox nel DBGrid di Delphi

Suggerimento inviato da Rene van der Heijden

Una serie di articoli intitolati Aggiunta di componenti a un DBGrid discute di posizionare praticamente qualsiasi controllo Delphi (componente visivo) in una cella di un DGBrid. L'idea è quella di creare interfacce utente visivamente più interessanti per la modifica dei campi all'interno di un DBGrid: un ComboBox per gli elenchi a discesa; un DateTimePicker (calendario) per i valori di data; una casella di controllo per i campi booleani.

CheckBox per campi booleani

CheckBox all'interno di un DBGrid

Come notato da Rene van der Heijden, la soluzione è piuttosto lunga e non funziona, almeno non quando si utilizza il mouse per fare clic sulle caselle di controllo.

Rene suggerisce un approccio più semplice che richiede solo due gestori pari: OnCellClick e OnCustomDrawCell per il controllo DBGrid:

 // Evento OnCellClik di un DBGrid1 procedura TForm.DBGrid1CellClick(Colonna: TColumn); inizio   Se (Column.Field.DataType = ftBoolean) poi   inizio     attiva True e False     Column.Grid.DataSource.DataSet.Edit; Column.Field.Value: = non Column.Field.AsBoolean;    post immediato: scopri tu stesso se lo desideri     Column.Grid.DataSource.DataSet.Post;     puoi aggiungere ulteriori funzionalità qui, da elaborare dopo aver apportato la modifica   fine; fine; // Evento OnDrawColumnCell di un DBGrid1 procedura TForm.DBGrid1DrawColumnCell (Mittente: TObject;   const Rect: TRect; DataCol: intero; Colonna: TColumn; Stato: TGridDrawState); const   CtrlState: Vettore[Booleano] di intero = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK o DFCS_CHECKED); inizio   Se (Column.Field.DataType = ftBoolean) poi   inizio     DBGrid1.Canvas.FillRect (Rect);     Se VarIsNull (Column.Field.Value) poi       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK o DFCS_INACTIVE) grigio     altro       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, CtrlState [Column.Field.AsBoolean]); selezionato o deselezionato   fine; fine; 

Navigatore suggerimenti Delphi:
"Rimuovi gli oggetti duplicati nella TStringList di Delphi
"5 fatti che non sapevi su Delphi e Classi e sul VCL, Ereditarietà e Controlli personalizzati e ...