Hola.
De este modo tiene que funcionarte:
Código PHP:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TDBCheckBox *CB = static_cast<TDBCheckBox*>(DBCheckBox1);
CB->Caption = "";
CB->ValueChecked = 1;
CB->ValueUnchecked = 0;
CB->DataSource = DataSource1;
CB->DataField = "SELECCION";
CB->Visible = false;
}
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State)
{
const int IsChecked[2] = {DFCS_BUTTONCHECK, DFCS_BUTTONCHECK | DFCS_CHECKED};
TDBGrid *GR = static_cast<TDBGrid*>(Sender);
TDBCheckBox *CB = static_cast<TDBCheckBox*>(DBCheckBox1);
TRect DrawRect;
if (Column->Field->FieldName == CB->DataField) {
if (State.Contains(gdFocused) ) {
CB->Left = GR->Left + Rect.left + 2;
CB->Top = GR->Top + Rect.top + 2;
CB->Width = Rect.Right - Rect.Left;
CB->Height = Rect.Bottom - Rect.Top;
CB->Visible = true;
} else {
DrawRect = Rect;
InflateRect(&DrawRect, -1, -1);
GR->Canvas->FillRect(Rect);
DrawFrameControl(GR->Canvas->Handle, &DrawRect, DFC_BUTTON,
IsChecked[Column->Field->AsInteger]);
}
}
}
void __fastcall TForm1::DBGrid1ColExit(TObject *Sender)
{
TDBGrid *GR = static_cast<TDBGrid*>(Sender);
DBCheckBox1->Visible = GR->SelectedField->FieldName == DBCheckBox1->DataField;
}
(fijate que usé un
TDBCheckBox en lugar de un
TCheckBox)
Y en la definición de la tabla agregaría:
Código SQL
[-]
CREATE TABLE TABLA (
...,
SELECCION SMALLINT DEFAULT 0 CHECK(SELECCION IN (0,1)),
...
);
Y, como lógicamente te indica
Casimiro, tu DataSet tiene que tener la capacidad de actualizar la tabla.
Saludos