Delphi调整Dbgrid列宽.docx
- 文档编号:3766055
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:6
- 大小:16.98KB
Delphi调整Dbgrid列宽.docx
《Delphi调整Dbgrid列宽.docx》由会员分享,可在线阅读,更多相关《Delphi调整Dbgrid列宽.docx(6页珍藏版)》请在冰豆网上搜索。
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
......
-------------------------------------------------------------------------------
末了,还要说一点:
通常保存设置的文件是在当前目录下,另建一个子目录来存储,但这样在读取时需要判断此子目录是否存在,若不存在则先创建之,特别是保存,否则可能会出错。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi 调整 Dbgrid