试试吧,看别人的
///////Begin Source
uses
  Math;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
    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 }
///////End Source///////Begin Demo
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  DBGridRecordSize(Column);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
  DBGridAutoSize(DBGrid1);
end;
///////End Demo

解决方案 »

  1.   

    我 想对于一个数据表中某一字段,其值的长度是变的,故而你只需在设计阶段完成即可.右键Dbgrid 选columns editor然后设计该字段的长度
      

  2.   

    function DBGridAutoSize(mDBGrid: TDBGrid; mOffset: Integer = 5): Boolean;
     
    这一段代码可以在什么时候?
      

  3.   

    在DBGrid中,会出现某一字段的内容很长,你需要手动拖动调整其长度,通过程序怎么样去自动调整其长度呢? 那么用什么方法实现我需要的功能呢??
      

  4.   

    to jyqkr(酷鱼) 
      版主ZSWang的大作,刚快接!
      

  5.   

    写在数据集的AFTEROPEN里就可以!
      

  6.   

    DBGridAutoSize(DBGrid1);
    放在窗体formshow试试