delphi怎么在DBGrid的每条记录前出现一个CheckBox
比如,我通过一个查询选出了10条记录,但仍然有几条不符合要求,只要在符合条件的记录前画勾,就可以打印出所要的结果。
这个复选框可以说是临时的,它并不包含在数据库里。也就是说并不是再加一个字段,让它以CheckBox的形式显示。
谢谢!!
那在select 的时候定义一个列,select t.*,'Y' flag from table t
看有没 checkboxes 属性有了选择 true就行了。
可以换个控件,用TDBGridEh,建个计算字段。
办法有二:
1、使用现成控件,如TDBGridEh。
2、建议一个字段(字符型),选择了输入一个字符。再设置被选择的行为红色。
先在数据集中增加一个计算字段,再在DBGrid单元格中绑定一个checkBox控件,点击控件选中与否改变计算字段的值即可
并不太完美的答案-不支持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的属性变化,到底应该怎么写?
这个复选框可以说是临时的,它并不包含在数据库里。也就是说并不是再加一个字段,让它以CheckBox的形式显示。
(忘了说了):这个想法很好,但实际是不可能实现的(其实没有不可能的事,只是水平高低的问题)。最好的方法还是在数据库里添加一个CheckBox字段。试想,你在DBGrid外边加上20个CheckBox,而数据有几千条,你怎么和数据一一对应呢?
用cxGrid,里面设置字段有个property,把他设置成CheckBox