DBGrid 根据表格中数据长度自动调整表格宽度

在“自动设置表格宽度”文本框中获取每个字段实际使用的最大字节数,然后设置DBGrid表格列的Field.DisplayWidth属性来根据实际字段长度自动调整表格宽度,主要代码如下:
procedure TFrmOrderBy.BtnOrderClick(Sender: TObject);
var
   i: integer;
   fieldname: string;
begin
   with AQuery do
begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT max(datalength(id)) AS id ,');
    SQL.Add('max(datalength(number))AS number,');
    SQL.Add('max(datalength(name))AS name,');
    SQL.Add('max(datalength(old))AS old,');
    SQL.Add('max(datalength(sex))AS sex,');
    SQL.Add('max(datalength(telephone))AS telephone,');
    SQL.Add('max(datalength(department))AS department,');
    SQL.Add('max(len(joindate))AS joindate');
    SQL.Add('FROM TB_Worker');
    Open;
   end;//本段代码用于获取目标数据中各个字段实际数据的最大长度
   for i := 0 to DBGList.Columns.Count - 1 do//根据目标数据的最大长度设置列宽
   begin
    fieldname := DBGList.Columns[i].Field.FieldName;
    DBGList.Columns[i].Field.DisplayWidth := AQuery.FieldByName(fieldname).AsInteger;
   end;
end;
function   DBGridRecordSize(mColumn:   TColumn):   Boolean;
{   返回记录数据网格列显示最大宽度是否成功   } 
begin 
    Result   :=   False; 
    if   not   Assigned(mColumn.Field)   then   Exit; 
    mColumn.Field.Tag   :=   Max(mColumn.Field.Tag, 
        TDBGrid(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText)); 
    Result   :=   True; 
end;   {   DBGridRecordSize   }


function DBGridAutoSize(mDBGrid: TDBGrid; mOffset: Integer = 5): 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
    DBGridRecordSize(mDBGrid.Columns[I]);//此句可以屏蔽在DBGrid1DrawColumnCell事件中加入DBGridRecordSize(Column);
    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;
    mDBGrid.Refresh;
  end;
  Result := True;
end; {   DBGridAutoSize   }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值