如何让DBGridEh的宽度自动适应?

解决方案 »

  1.   

    DBGridEh好像没有这个功能,只有自己定义宽度可以通过下面手工设置:
    DBGridEh1.Columns.Items[0].Width :=80;
    DBGridEh1.Columns.Items[1].Width :=100;
      

  2.   

    Delphi中实现DBGrid列宽度自动调整Procedure TForm1.FormCreate(Sender: TObject);
     begin //在Tag属性中设置需要自动调整的列的最小宽度(固定值)
     //这里将列宽值设为40px 
     Table1.FieldByName('FirstName').Tag := 40; //这里设置一个变化的值 
     //该值是做过运算的列标题的宽度值
     Table1.FieldByName('LastName').Tag := 4 + Canvas.TextWidth( Table1.FieldByName('LastName').DisplayName);
    end;Procedure FixDBGridColumnsWidth(const DBGrid: TDBGrid);
    var
     i : integer;
     TotWidth : integer;//定义整个宽度
     VarWidth : integer;//定义变化的宽度
     ResizableColumnCount : integer;//定义变化宽度列的总数
     AColumn : TColumn;
    begin
     //在重新调整前所有列的宽度
     TotWidth := 0;
     VarWidth := 0;
     //有多少列需要自动调整
     ResizableColumnCount := 0; for i := 0 to -1 + DBGrid.Columns.Count do
     begin
      TotWidth := TotWidth + DBGrid.Columns[i].Width;
      if DBGrid.Columns[i].Field.Tag <> 0 then 
       Inc(ResizableColumnCount);
     end; //为每个列分隔线增加1PX
     if dgColLines in DBGrid.Options then
      TotWidth := TotWidth + DBGrid.Columns.Count; if dgIndicator in DBGrid.Options then
      TotWidth := TotWidth + IndicatorWidth; VarWidth := DBGrid.ClientWidth - TotWidth; //平均分配变化宽度的值
     //给所有需要自动调整的列
     if ResizableColumnCount > 0 then
      VarWidth := varWidth div ResizableColumnCount; for i := 0 to -1 + DBGrid.Columns.Count do
     begin
      AColumn := DBGrid.Columns[i];
      if AColumn.Field.Tag <> 0 then
      begin
       AColumn.Width := AColumn.Width + VarWidth;
       if AColumn.Width < AColumn.Field.Tag then
        AColumn.Width := AColumn.Field.Tag;
      end;
     end;
    end; Procedure TForm1.FormResize(Sender: TObject);
    begin
     FixDBGridColumnsWidth(DBGrid1);
    end; 
      

  3.   

    dbgrideh.autofitwidth := true;这是3.6版