Delphi调整Dbgrid列宽.docx

上传人:b****4 文档编号:3766055 上传时间:2022-11-25 格式:DOCX 页数:6 大小:16.98KB
下载 相关 举报
Delphi调整Dbgrid列宽.docx_第1页
第1页 / 共6页
Delphi调整Dbgrid列宽.docx_第2页
第2页 / 共6页
Delphi调整Dbgrid列宽.docx_第3页
第3页 / 共6页
Delphi调整Dbgrid列宽.docx_第4页
第4页 / 共6页
Delphi调整Dbgrid列宽.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

Delphi调整Dbgrid列宽.docx

《Delphi调整Dbgrid列宽.docx》由会员分享,可在线阅读,更多相关《Delphi调整Dbgrid列宽.docx(6页珍藏版)》请在冰豆网上搜索。

Delphi调整Dbgrid列宽.docx

Delphi调整Dbgrid列宽

Delphi调整Dbgrid列宽

DBGRID列宽怎么调?

一、设置好你的dbgrid,显示数据后可做如下动作调节你的列宽:

1.双击dbgrid,出现一个编辑框:

EDITINGDBGRID1.COLUNMS

2.如果是空白的话,点击第三个图标:

AddAllFields

3.选择需要设置的行,在它的属性栏,直接设置他了WINDTH值为你想要的.

二、DBGrid自动调整列宽

functionDBGridRecordSize(mColumn:

TColumn):

Boolean;

{返回记录数据网格列显示最大宽度是否成功}

begin

Result:

=False;

ifnotAssigned(mColumn.Field)thenExit;

mColumn.Field.Tag:

=Max(mColumn.Field.Tag,

TDBGrid(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText));

Result:

=True;

end;{DBGridRecordSize}

functionDBGridAutoSize(mDBGrid:

TDBGrid;mOffset:

Integer=5):

Boolean;

{返回数据网格自动适应宽度是否成功}

var

I:

Integer;

begin

Result:

=False;

ifnotAssigned(mDBGrid)thenExit;

ifnotAssigned(mDBGrid.DataSource)thenExit;

ifnotAssigned(mDBGrid.DataSource.DataSet)thenExit;

ifnotmDBGrid.DataSource.DataSet.ActivethenExit;

forI:

=0tomDBGrid.Columns.Count-1do

begin

ifnotmDBGrid.Columns[I].VisiblethenContinue;

ifAssigned(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}

///////源代码结束

///////使用示例开始

procedureTForm1.DBGrid1DrawColumnCell(Sender:

TObject;constRect:

TRect;

DataCol:

Integer;Column:

TColumn;State:

TGridDrawState);

begin

DBGridRecordSize(Column);

end;

procedureTForm1.Button1Click(Sender:

TObject);

begin

DBGridAutoSize(DBGrid1);

end;

///////使用示例结束

usesMath;

三、在Delphi中用ini文件保存表格列宽

用Delphi做数据库系统开发,免不了要在许多地方输出查询结果,而显示查询结果最经常使用的控件之一当属TDBGrid。

但TDBGrid控件默认的显示列宽是与数据库中对应字段的最大宽度相关的。

例如,如果数据库中有一个“联系地址”字段,类型为varchar(200),那么查询结果是显示方式是很不友好的!

因为这一列会非常宽。

而且,多数情况下,各列的宽度都不是设计者或用户们想要的,这一点想必做系统开发的人都会认同。

曾经,我的解决办法是,在每个查询操作之后,再调用一个自定义过程来分别设置各个表格的各列宽度,而这些宽度也是在设计阶段,边设计边调试确定的。

这样做不仅麻烦,而且需要做大量的重复工作,非常不方便。

并且这样做是非常死板的:

程序固定了表格各列的宽度!

实际上是设计者固定了!

如果能提供一个初始默认值,并由用户自己设置,那当然是最好不过了。

因此,更为高效的一个解决办法是利用ini文件存储各个表格各列的宽度。

但为了读取和存储方便,各段中的节名最好使用数字的形式,这样就可以通过一个循环语句实现了。

之所以用ini文件,一是因为ini文件读写非常方便,二是在读取时需指定一个失败时的返回值。

当然还可以使用StringList保存设置到其他文本文件中,所谓罗卜青菜各有所爱。

通常需要使用表格的地方不只三两个,那最好就将各个表格的列宽设置保存在同一个ini文件中,通过段名来区分各个表格。

下面讲一下我自己的具体实现方法。

过程定义:

新建一窗体,在接口中引用DBGrids。

定义两个过程SetColumnWidth和SaveColumnWidth,分别用于从/向ini文件读取/保存表格列宽。

两个过程均需要三个参数,分别接受传入的TDBGrid,ini文件中的段名和包含路径的ini文件名;其中段名用于区分不同的表。

两个过程分别如下:

-------------------------------------------------------------------------------

procedureTGridForm.SetColumnWidth(constGrid:

TDBGrid;section,fname:

string);

var

i:

integer;

inifile:

TIniFile;//调入文件并根据ini文件内容指定DBGrid1的列宽度

begin

ifFileExists(fname)then//若文件存在

begin

try

inifile:

=TIniFile.Create(fname);

fori:

=0toGrid.Columns.Count-1do

Grid.Columns[i].Width:

=inifile.ReadInteger(section,inttostr(i),150);

finally//读取失败时返回150作默认值,可根据实际情况设写

inifile.Free;//翻译

end;

end;

end;

-------------------------------------------------------------------------------

procedureTGridForm.SaveColumnWidth(constgrid:

TDBGrid;section,fname:

string);

var

i:

integer;

inifile:

TIniFile;//窗体关闭时记录DBGrid1的列宽度

begin

try

inifile:

=TIniFile.Create(fname);

fori:

=0toGrid.Columns.Count-1do

inifile.WriteInteger(section,inttostr(i),Grid.Columns[i].Width);

//写入各列的宽度,以表格名为段名,以数字为节名,从0开始

//写入当前列宽

finally

inifile.Free;

end;

end;

-------------------------------------------------------------------------------

而为了通用性,这个单元里通常只编写一些通过的或只供内部调用的过程/函数,用于被外部调用。

例如窗体名设置为GridForm,单元文件保存为GridUnit,这样,在需要调用上述通过过程的窗体,只需在其引用列表中添加GridUnit,在引用时传入相应的参数即可。

调用:

在查询数据库后调用设置列宽的过程,不管查询返回行数是否为0,因为返回0行(没有返回)时,DBGrid的表格标题会有查询的返回标题:

GridForm.SetColumnWidth(DBGrid1,'库存',ExtractFilePath(Application.ExeName)+'GridWidth.ini');

在主调窗体的关闭事件中保存当前列宽

GridForm.SaveColumnWidth(DBGrid1,'库存',ExtractFilePath(Application.ExeName)+'GridWidth.ini');其中第二个参数指定在读取/保存的列宽为“库存”表的,第三个参数指定ini文件为应用程序所在目录下的GrdiWidth.ini文件,是通过应用程序目录来查找或存储此ini文件的,而最好不要使用绝对路径。

这样,某个表格第一次显示数据时,仍然是默认的情况,因为此时ini文件里还没存储有该表格的列宽设置。

手动调整,关闭窗体后,下次再打开此窗体,列宽就会被设置为上次手动调整的格式了,因为上次的调整结果已经保存到ini文件里了。

下面看一看此ini文件里都有哪些内容:

-------------------------------------------------------------------------------

[员工]

0=96

1=184

2=65

3=112

4=124

5=124

6=123

7=108

[业务清单]

0=64

1=184

2=304

3=82

4=64

5=6004

[部门]

0=75

1=138

2=184

3=127

[用户]

0=184

1=85

2=110

3=177

[供应商]

0=106

1=82

2=82

3=42

4=123

5=123

6=130

7=122

8=141

......

-------------------------------------------------------------------------------

末了,还要说一点:

通常保存设置的文件是在当前目录下,另建一个子目录来存储,但这样在读取时需要判断此子目录是否存在,若不存在则先创建之,特别是保存,否则可能会出错。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1