DBGridEh怎样实现自动列宽
发布网友
发布时间:2023-07-21 07:35
我来回答
共1个回答
热心网友
时间:2024-10-22 05:14
是呀,重换控件是个很痛苦的事情。DBGrid或DBGridEh都可以实现的,只是处理起来费一点儿事而已,过去曾绞尽脑汁做过类似的。方法是利用DBGrid的DBGrid1DrawColumnCell事件重画相关的单元格线,用白色。举个例子,不显示第二列的每行的格线:
procere TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.Index=1) then
begin
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
with (Sender as TDBGrid).Canvas do //画 cell 的边框
begin
Pen.Color := clwhite; //定义画笔颜色(白色)
MoveTo(Rect.Left, Rect.Bottom);//画笔定位
LineTo(Rect.Right, Rect.Bottom);//画白色的横线,合并行的效果
//MoveTo(Rect.Right, Rect.Top);//画笔定位
//LineTo(Rect.Right, Rect.Bottom);//画白色的竖线,合并列的效果
end;
end;
end;
你加上对Rows的判断就可以按区域拆分网格线了,当然这不是真正意义的单元格合并,最好结合StringGrid控件做,StringGrid在前台,DBGrid在后台,填写数据时你还必须加上判断,哪行添,哪行不添,确实不省事,但也是不得已的办法,不可能找到第二条路的,只能这么做。
如果想实现上图的效果你还必须用代码灵活设置Grid单元格的高度或宽度。