通过数据集控件让DBDrid实现列宽自动调整

    技术2022-05-11  59

    在写程序的实践中,为了能够让DBGrid控件显示数据的时候能够自动的让列宽符合列中数据的宽度,我参考了很多资料,最后采用调整数据集的列宽达到间接的调整与数据集相连的DBGrid控件的列宽的目的,但是这种方法不能调整不与数据集相连的表格列。在工程的DateMoudle单元中实现这个功能,这样在数据模块初始化之后DBGrid控件的列宽就达到了,数据模块单元代码如下:(本方法只在ADDTable控件上调试通过) unit DM; // Copyright (c) 2007. All Rights Reserved. // Written by stosc interface uses   SysUtils, Classes, DB, ADODB; type   TDM = class(TDataModule)     ADOCly: TADOConnection;     ATchanpin: TADOTable;     ATchangs: TADOTable;     ATkehu: TADOTable;     ATkucun: TADOTable;     DSchangs: TDataSource;     DSchanpin: TDataSource;     DSkehu: TDataSource;     DSkucun: TDataSource;     ATxiaos: TADOTable;     DSxiaos: TDataSource;     ATtuihuo: TADOTable;     ATpeihuo: TADOTable;     DStuihuo: TDataSource;     DSpeihuo: TDataSource;     ATxiaosDSDesigner: TWideStringField;     ATxiaosDSDesigner2: TIntegerField;     ATxiaosDSDesigner3: TWideStringField;     ATxiaosDSDesigner4: TBCDField;     ATxiaosDSDesigner5: TWideStringField;     ATxiaosDSDesigner6: TBCDField;     ATxiaosField: TStringField;     ATchanpinDSDesigner: TAutoIncField;     ATchanpinDSDesigner2: TWideStringField;     ATchanpinDSDesigner3: TWideStringField;     ATchanpinDSDesigner4: TIntegerField;     ATchanpinDSDesigner5: TBCDField;     ATchanpinDSDesigner6: TBCDField;     function AutoRowSize(mTable :TObject) : integer;   {列宽调整函数声明}     procedure DataModuleCreate(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end; var   DM: TDM; implementation {$R *.dfm} function TDM.AutoRowSize(mTable :TObject) : integer;    {列宽调整函数} var   ic:Integer;   {列循环控制}   ir:Integer;   {行循环控制} begin  if (mTable is TADOTable) then  for ic:=0 to (mTable as TADOTable).FieldCount-1 do  begin   {把每字段的字段名的宽度赋值给该字段的Tag属性保存}    (mTable as TADOTable).Fields[ic].Tag:=length((mTable as TADOTable).Fields[ic].DisplayLabel);    for ir:=0 to (mTable as TADOTable).RecordCount-1 do    {查找宽度最大的记录,并把记录值赋给Tag}      if length((mTable as TADOTable).Fields[ic].AsString)>(mTable as TADOTable).Fields[ic].Tag then      (mTable as TADOTable).Fields[ic].Tag:=length((mTable as TADOTable).Fields[ic].AsString);         {把Tag值作为列的宽度值}      (mTable as TADOTable).Fields[ic].DisplayWidth:=(mTable as TADOTable).Fields[ic].Tag;  end; end; procedure TDM.DataModuleCreate(Sender: TObject); var   i:Integer; begin  for i:=0 to self.ComponentCount-1 do   {循环查找ADOTable控件}  if (self.Components[i] is TADOTable) then     self.AutoRowSize(self.Components[i]);   {调用列宽调整函数} end; end.

    最新回复(0)