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

 在写程序的实践中,为了能够让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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值