我用dbGrid显示一个table;但是有个字段(dse)数据库定义的长度太长(100),例如:table里有100条纪录,当前dbGrid中显示的是25条纪录,在这25条纪录中,dse字段中,最长的数据中长度是10,但是dbGrid中dse的宽度很宽(数据库定义的长度是100),我想让dse的宽度变成10(dse字段中,最长的数据的长度),然后向下拉显示其他纪录时,让dse的宽度也跟着变。我该怎么做????????????????

解决方案 »

  1.   

    数据网格自动适应宽度    //*)///////Begin SourceusesMath;function DBGridRecordSize(mColumn: TColumn): Boolean;{ 返回记录数据网格列显示最大宽度是否成功 }beginResult := 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;{ 返回数据网格自动适应宽度是否成功 }varI: Integer;beginResult := 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 beginif not mDBGrid.Columns[I].Visible then Continue;if Assigned(mDBGrid.Columns[I].Field) thenmDBGrid.Columns[I].Width := Max(mDBGrid.Columns[I].Field.Tag,mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption)) + mOffsetelse mDBGrid.Columns[I].Width :=mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption) + mOffset;mDBGrid.Refresh;end;Result := True;end; { DBGridAutoSize }///////End Source///////Begin Demoprocedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;DataCol: Integer; Column: TColumn; State: TGridDrawState);beginDBGridRecordSize(Column);end;procedure TForm1.Button1Click(Sender: TObject);beginDBGridAutoSize(DBGrid1);end;///////End Demo 
     
       
      

  2.   

    那么,当我向下拉滚动条时,dbGrid里的内容变了,如何来激发DBGridAutoSize(DBGrid1)函数呢
    用哪个事件呢
    ?????