Editați și afișați câmpurile booleane folosind o casă de check în DBGrid Delphi

Sfat depus de Rene van der Heijden

O serie de articole intitulate Adăugarea de componente la o DBGrid discută despre plasarea aproape a oricărui control Delphi (component vizual) într-o celulă a unui DGBrid. Ideea este de a crea interfețe de utilizator mai atractive pentru câmpurile de editare în cadrul unui DBGrid: un ComboBox pentru liste derulante; un DateTimePicker (calendar) pentru valorile datei; o casetă de selectare pentru câmpurile booleane.

CheckBox pentru câmpurile booleane

CheckBox în interiorul unui DBGrid

După cum a observat Rene van der Heijden, soluția este destul de lungă și nu funcționează, cel puțin nu atunci când utilizați mouse-ul pentru a face clic pe casetele de selectare..

Rene sugerează o abordare mai ușoară, necesitând doar doi manipulatori uniformi: OnCellClick și OnCustomDrawCell pentru controlul DBGrid:

 // Evenimentul OnCellClik al unui DBGrid1 procedură TForm.DBGrid1CellClick(Coloana: TColumn); începe   dacă (Column.Field.DataType = ftBoolean) apoi   începe     comută True și False     Column.Grid.DataSource.DataSet.Edit; Column.Field.Value: = nu Column.Field.AsBoolean;    postare imediată - vedeți singur dacă doriți acest lucru     Column.Grid.DataSource.DataSet.Post;     puteți adăuga aici o funcționalitate suplimentară, care va fi procesată după modificarea   Sfârșit; Sfârșit; // Evenimentul OnDrawColumnCell al unui DBGrid1 procedură TForm.DBGrid1DrawColumnCell (Expeditor: TObject;   const Rect: TRect; DataCol: Integer; Coloana: TColumn; Stat: TGridDrawState); const   CtrlState: mulțime[Boolean] de număr întreg = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK sau DFCS_CHECKED); începe   dacă (Column.Field.DataType = ftBoolean) apoi   începe     DBGrid1.Canvas.FillRect (Rect);     dacă VarIsNull (Column.Field.Value) apoi       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK sau DFCS_INACTIVE) Estompată     altfel       DrawFrameControl (DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, CtrlState [Column.Field.AsBoolean]); bifat sau bifat   Sfârșit; Sfârșit; 

Navigator pentru sfaturi Delphi:
"Eliminați elemente duplicate din TStringList Delphi
„5 fapte pe care nu le știați despre Delphi și clase și despre controalele VCL și de moștenire și personalizare și ...