dbgrideh自适应列宽

DBGridEH自适应宽度
1.设AutoFitColWidths=true;它的列宽会跟据整个Grid的宽度自动调整且每一列(TColumnEh)都有AutoFitColWidth属性,设为true,该列宽度自动调整,经测试,这种自适应不能满足要求。
2.OptionsEh中有dghDblClickOptimizeColWidth,当双击表缝时,前一列按当前数据宽度自动调整宽度,这种方式基本上能满足要求,但很不方便。


3.
[delphi] view plain copy
dbgrdh1.AutoFitColWidths:=True;  
  
 for ii:=0 to dbgrdh1.Columns.Count-1 do  
  with dbgrdh1.Columns[ii] do  
  OptimizeWidth;  
这种方式感觉不错!应该能满足要求。


4.另外写过程


[delphi] view plain copy
function DBGridRecordSize(mColumn: TColumnEh): Boolean;  
{ 返回记录数据网格列显示最大宽度是否成功 }  
begin  
  Result := False;  
  if not Assigned(mColumn.Field) then Exit;  
  mColumn.Field.Tag := Max(mColumn.Field.Tag,  
  TDBGridEh(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText));  
  Result := True;  
end; { DBGridRecordSize }  
  
function DBGridAutoSize(mDBGrid: TDBGridEh; mOffset: Integer =20): Boolean;  
{ 返回数据网格自动适应宽度是否成功 }  
var  
  I: Integer;  
begin  
  Result := False;  
  if not Assigned(mDBGrid) then Exit;  
  if not Assigned(mDBGrid.DataSource) then Exit;  
  if not Assigned(mDBGrid.DataSource.DataSet) then Exit;  
  if not mDBGrid.DataSource.DataSet.Active then Exit;  
  for I := 0 to mDBGrid.Columns.Count - 1 do begin  
   if not mDBGrid.Columns[i].Visible then Continue;  
   if Assigned(mDBGrid.Columns[i].Field) then  
     mDBGrid.Columns[i].Width := Max(mDBGrid.Columns[i].Field.Tag,  
       mDBGrid.Canvas.TextWidth(mDBGrid.Columns[i].Title.Caption)) + mOffset  
   else mDBGrid.Columns[i].Width :=  
     mDBGrid.Canvas.TextWidth(mDBGrid.Columns[i].Title.Caption)+ mOffset;  
   //  ShowMsg(IntToStr(mDBGrid.Canvas.TextWidth(mDBGrid.Columns[i].Title.Caption))+'_'+IntToStr( mDBGrid.Columns[i].Width)+mDBGrid.Columns[i].Title.Caption);  
   mDBGrid.Refresh;  
  end;  
  Result := True;  
end; { DBGridAutoSize }  


 


在DrawColumnCell过程中添加
  DBGridRecordSize(Column)  ;


在button的click事件中


BGridAutoSize(dbgrdh1);即可
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值