并不太完美的答案-不支持xp样式 如果谁能让它支持了,那我认为就完美了。 其实添加一个DBCheckBox也挺好,需要时调出来让它盖住画的ChedkBox就行了。遗憾的是不能调整其大小,不能调到和画的那个一样大(当然,肯定有高手能做到)。 procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const CtrlState: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); begin if Column.Field.DataType = ftboolean then begin DBGrid1.Canvas.FillRect(Rect); DrawFrameControl(DBGrid1.Canvas.Handle,Rect, DFC_BUTTON, CtrlState [Column.Field.asboolean]); end; end;procedure TForm1.DBGrid1CellClick(Column: TColumn); begin if DBGrid1.SelectedField.DataType=ftboolean then begin DBGrid1.SelectedField.DataSet.Edit; DBGrid1.SelectedField.AsBoolean:=not DBGrid1.SelectedField.AsBoolean; DBGrid1.SelectedField.DataSet.Post; DBGrid1.Options:=DBGrid1.Options-[dgEditing]; end else if DBGrid1.SelectedField.DataType<>ftboolean then DBGrid1.Options:=DBGrid1.Options+[dgEditing]; end; 我有点疑问,想让DBGrid1.Options.dgEditing的属性变化,到底应该怎么写?
1、使用现成控件,如TDBGridEh。
2、建议一个字段(字符型),选择了输入一个字符。再设置被选择的行为红色。
TADOQUERY好像是实体字段
如果谁能让它支持了,那我认为就完美了。
其实添加一个DBCheckBox也挺好,需要时调出来让它盖住画的ChedkBox就行了。遗憾的是不能调整其大小,不能调到和画的那个一样大(当然,肯定有高手能做到)。
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
CtrlState: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
begin
if Column.Field.DataType = ftboolean then
begin
DBGrid1.Canvas.FillRect(Rect);
DrawFrameControl(DBGrid1.Canvas.Handle,Rect, DFC_BUTTON, CtrlState [Column.Field.asboolean]);
end;
end;procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if DBGrid1.SelectedField.DataType=ftboolean then
begin
DBGrid1.SelectedField.DataSet.Edit;
DBGrid1.SelectedField.AsBoolean:=not DBGrid1.SelectedField.AsBoolean;
DBGrid1.SelectedField.DataSet.Post;
DBGrid1.Options:=DBGrid1.Options-[dgEditing];
end
else
if DBGrid1.SelectedField.DataType<>ftboolean then
DBGrid1.Options:=DBGrid1.Options+[dgEditing];
end;
我有点疑问,想让DBGrid1.Options.dgEditing的属性变化,到底应该怎么写?
(忘了说了):这个想法很好,但实际是不可能实现的(其实没有不可能的事,只是水平高低的问题)。最好的方法还是在数据库里添加一个CheckBox字段。试想,你在DBGrid外边加上20个CheckBox,而数据有几千条,你怎么和数据一一对应呢?
看来没有再好的答案了,结帖给分。