DBGridEh列宽自动适应内容的简单方法

delphi4年前 (2021)发布 admin
558 0

方法一:
DBGEMainList是DBGridEh组件,mOffset是自定义变量,这里赋值是5
DBGEMainList.Columns[I].Width := Max(DBGEMainList.Columns[I].Field.Tag, DBGEMainList.Canvas.TextWidth(DBGEMainList.Columns[I].Title.Caption)) + mOffset;
看起来还不错,列宽可以适应标题了,可是当内容的长度超过标题,列宽没能增加,郁闷,失败了
方法二:
发现DBGridEh属性中有个OptionsEh,里面有个dghDblClickOptimizeColWidth,设置成true
帅哦,和Excel一样了,双击列间的交接处,这个列就可以自动调整大小去适应内容啦
看起来距离我的目标很近了~~
于是想到是不是可以用方法来触发双击表头连接处的事件,结果……没找到
于是想到是不是可以在DBGridEh源码里面看看人家原来咋实现的,我照搬就是,结果……没找到
谁让咱菜呢~
无意中,在DBGEMainList.Columns[I].后面点击了Ctrl+空格(代码提示快捷键),在出现的方法列表里面看到OptimizeWidth这个方法,看起来和那个双击啥的很像哈,窃喜~
循环调用一下,每个列都来这么一下子:
for i:=0 to DBGEMainList.Columns.Count-1 do
begin
DBGEMainList.Columns[i].OptimizeWidth;
end;

原文链接:https://blog.csdn.net/gaoyunpeng/article/details/1684454

行号显示
可以设置DBGridEh的属性OptionsEh下的dghShowRecNo为True,即可显示行号

DBGridEh1.OddRowColor:=clSkyBlue; //奇数行颜色
DBGridEh1.EvenRowColor:=clMoneyGreen; //偶数行颜色

运行效果:选中行变为蓝色
步骤1:设置dbgrid的options的dgrowselect为true.
步骤2:在dbgrid的ondrawcolumncell事件里面写上:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if gdSelected  in state then
    dbgrid1.Canvas.Brush.Color:=clblue;
     dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
end;

需求:dbgrideh前3列需要固定显示,不随着滚动条变动位置

解决方法:将dbgrideh的frozencols设置为3即可;

右侧固定:contracolcount 设置数值就行

DBGridEh1.FieldColumns[‘利率’].DisplayFormat:=’#0.0000000′ 则可以显示出保留的小数位

GridEh合计行的使用

首先设置几个属性:

FootRowCount := 1;

如果有合计金额的话还要设置:

SumList.Active := True;

打开Columns设置界面,有几个属性了解一下:

Footer.Value

Footer.ValueType

Footer.DisplayFormat

举例如下:

如果是第一列放“合计”两个字,则设置如下:

Footer.ValueType := fvtStaticText;

Footer.Value := ‘合计’;

如果是金额合计,设置如下:

Footer.DisplayFormat := ‘#,###.##’;  //金额格式

Footer.ValueType := fvtSum;

Footer.FieldName := Amount;  //要合计的字段名

dbgrideh设置显示和隐藏某些列:indicatortitle下面全选

DBGridEh列宽自动适应内容的简单方法

© 版权声明

相关文章