关于DBGrid 能不能设置什么属性 让他自动适合字段列的宽度?

解决方案 »

  1.   

    for 1 to 字段数目 do
    begin
      1. 找出每一列最长的字段,]
      2. 计算他的宽度,
      3. 设置列宽
    end;
      

  2.   

    自动适应我不会哦.设置固定的到可以.
    for i:=0 to 字段数目 do
     begin
     dbgrid.columns[i].width:=250;
     end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      n:integer;
    begin
     //1. 找出每一列最长的字段,]
     //2. 计算他的宽度,
     n:=0;
     with ADOQuery1 do
     begin
       first;
       while not eof do
       begin
         if n < length(FieldByName('CODE').AsString) then
            n:= length(FieldByName('CODE').AsString);
         next;
       end;
     end;  
     //3. 设置列宽
     DBGrid1.Columns[1].Width:= n*6+4;
    end;
      

  4.   

    DBGrid 数据网格自动适应宽度-大富翁论坛转 <delphi>2007-08-03 下午 05:12///////源代码开始
    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 }
    ///////源代码结束///////使用示例开始
    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;
    ///////使用示例结束