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.
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 ...