Ik heb gemerkt dat heel veel DBGrid met checkboxes alleen kijken of een veld boolean is of niet. Dat kan heel nadelig zijn als je een database hebt, waarin de checkbox een char is en de waarde 'J' of 'N' hebt. DBCheckbox doet het goed, in de grid heb je deze aanpassing nodig om de juiste waarde te tonen
delphi Code:
procedure TCheckDBGrid.DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
const CtrlState :array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var blWaarde : boolean;
begin
inherited;
if TCheckColumn(Column).Check then
begin
BlWaarde := Column.Field.AsBoolean;
if not BlWaarde then
begin
//check of er een een andere waarde is
if Column.Field.AsString = TCheckColumn(Columns[SelectedIndex]).FValueChecked then
BlWaarde := true else
if Column.Field.AsString = TCheckColumn(Columns[SelectedIndex]).FValueUnChecked then
BlWaarde := false else
BlWaarde := false;
end;
Canvas.FillRect(Rect);
DrawFrameControl(Canvas.Handle,Rect,DFC_BUTTON,CtrlState[blwaarde]);
end;
end;
Dit werkt ten dele. De waarden worden alleen getoond als je erop staat. In alle andere gevallen is het blanco. Ik doe dus iets fout. Maar wat.
In mijn bijlage zit de grid (niet van mij zelf), waarin ik die aanpassing hebt gedaan.
Bookmarks