自己画吧,给你一点门路: procedure TForm1.FormCreate(Sender: TObject); begin DBGrid1.DefaultDrawing:=False; //或直接设置DBGrid的DefaultDrawing属性为False; end; procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if Column.FieldName='CHECKFIELD' then begin if Column.Field.AsBoolean then begin DBGrid1.Canvas.FillRect(rect); DBGrid1.Canvas.MoveTo (Rect.Left,Rect.Top); DBGrid1.Canvas.LineTo (Rect.Left+8,Rect.Top+8); DBGrid1.Canvas.LineTo (Rect.Left+20,Rect.Top); {OR: DBGrid1.Canvas.Draw(Rect.Left+2,Rect.Top+2,TGraphic(ImgCheck));//image of Checked } end else begin DBGrid1.Canvas.FillRect(rect); {OR: DBGrid1.Canvas.Draw(Rect.Left+2,Rect.Top+2,TGraphic(ImgUnCheck)); //image of UnChecked } end; end else begin DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); end; end;
我用的DBGridEh中字段的属性中由checkbox的属性,可考虑用该控件,会节省一些时间
To hhytsoft(雨中独行) & ljmanage(过客): 不知此控件在那里可以下载,或请帮忙发到信箱:[email protected] 多谢了!!!
在dbgrid的fields的属性中有这个应用,自己看一下
用DevExpress Grid www.51delphi.com有下
To fangzhouyu(海) & joky1981() & XXSingle(黑夜白天人): 能否说的详细点儿,DBGrid的fields属性为只读的。 谢谢各位了!!!
呵呵,我来说得详细点吧! 在DBGrid的所在Form上加一个TDBCheckBox,比如你要做成复选筐的那一列是:marrige字段,那个你的checkbox的datafield就应该是marriage字段,数据源我就不罗嗦了,checkbox的visible:=false 此时需要处理DBGrid的一下几个事件:OnDrawColumnCell,代码如下: begin if (gdFocused in State)and(Column.Field=Table1marrige)then begin checkbox.SetBounds(Rect.Left+DBGrid1.Left+1, Rect.Top+DBGrid1.Top+1, Rect.right-Rect.Left, Rect.Bottom-Rect.top); end; end; 通过OnColEnter事件来显示或隐藏复选筐 begin if DBGrid1.Columns[DBGrid1.SelectedIndex].Field=Table1marrige then checkbox.Visible:=True; else checkbox.Visible:=false; end; 你要是还想:在显示复选筐时,切换复选矿而不是接受用户输入,则处理DBGrid1KeyPress begin if checkbox.Visible and (Ord(key)>31) then begin key:=#0; Table1.Edit; checkbox.checked:=not checkbox.checked; checkbox.Field.AsBoolean:=checkbox.Checked; end; end; 好了,该结贴了!
procedure TForm1.FormCreate(Sender: TObject);
begin
DBGrid1.DefaultDrawing:=False;
//或直接设置DBGrid的DefaultDrawing属性为False;
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.FieldName='CHECKFIELD' then
begin
if Column.Field.AsBoolean then
begin
DBGrid1.Canvas.FillRect(rect);
DBGrid1.Canvas.MoveTo (Rect.Left,Rect.Top);
DBGrid1.Canvas.LineTo (Rect.Left+8,Rect.Top+8);
DBGrid1.Canvas.LineTo (Rect.Left+20,Rect.Top);
{OR:
DBGrid1.Canvas.Draw(Rect.Left+2,Rect.Top+2,TGraphic(ImgCheck));//image of Checked
}
end else
begin
DBGrid1.Canvas.FillRect(rect);
{OR:
DBGrid1.Canvas.Draw(Rect.Left+2,Rect.Top+2,TGraphic(ImgUnCheck)); //image of UnChecked
}
end;
end else
begin
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;
不知此控件在那里可以下载,或请帮忙发到信箱:[email protected]
多谢了!!!
www.51delphi.com有下
能否说的详细点儿,DBGrid的fields属性为只读的。
谢谢各位了!!!
具体可以在DBGrid的OnColEnter和OnColExit事件上写代码实现
在DBGrid的所在Form上加一个TDBCheckBox,比如你要做成复选筐的那一列是:marrige字段,那个你的checkbox的datafield就应该是marriage字段,数据源我就不罗嗦了,checkbox的visible:=false
此时需要处理DBGrid的一下几个事件:OnDrawColumnCell,代码如下:
begin
if (gdFocused in State)and(Column.Field=Table1marrige)then
begin
checkbox.SetBounds(Rect.Left+DBGrid1.Left+1,
Rect.Top+DBGrid1.Top+1,
Rect.right-Rect.Left,
Rect.Bottom-Rect.top);
end;
end;
通过OnColEnter事件来显示或隐藏复选筐
begin
if DBGrid1.Columns[DBGrid1.SelectedIndex].Field=Table1marrige then
checkbox.Visible:=True;
else
checkbox.Visible:=false;
end;
你要是还想:在显示复选筐时,切换复选矿而不是接受用户输入,则处理DBGrid1KeyPress
begin
if checkbox.Visible and (Ord(key)>31) then
begin
key:=#0;
Table1.Edit;
checkbox.checked:=not checkbox.checked;
checkbox.Field.AsBoolean:=checkbox.Checked;
end;
end;
好了,该结贴了!