如何根据数据内容调整dbgrid的列宽?

marf_cn 2006-12-05 02:00:05
将dbgrid的列宽调整为该列字段最多文字的宽度。
...全文
195 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
songyafeng 2007-03-05
  • 打赏
  • 举报
回复
for i:=0 to Dbgrideh1.Columns.Count -1 do
Dbgrideh1.Columns[i].OptimizeWidth;
//可以搞定打开后列宽为最小值,不必担心空白区域较大问题
marf_cn 2006-12-07
  • 打赏
  • 举报
回复
字段名称的长度?
我想要的是字段里最大记录值的长度来判断
lccclgb 2006-12-06
  • 打赏
  • 举报
回复
数据少到时无所谓,多了系统花费就太大了:
procedure SetColWidth(ADBGRdi:TDBGrid);
var
I:Byte;
SavedPlace:TBookMarkStr;
ColWidths:array of Integer;
begin
with ADBGrid,DataSource.DataSet do
begin
SetLength(ColWidths,Columns.Count);
for I:=0 to Columns.Count-1 do
ColWidths[I]:=Length(Columns[I].Title.Caption);
SavedPlace:=BookMark;
DisableControls;
try
First;
while not EOF do
begin
for I:=0 to Columns.Count-1 do
try
ColWidths[I]:=Max(ColWidths[I],Length(Columns[I].Field.AsString));
//这里还可以做一些判断,只是对某些类型字段处理。其它采用默认值就是了
except
//屏蔽不能转换为字符的字段导致的异常。
end;
Next;
end;
for I:=0 to Columns.Count-1 do
Columns[I].Width:=ColWidths[I];
finally
BookMark:= SavedPlace;
EnableControls;
end;
end;
end;
hfltp 2006-12-05
  • 打赏
  • 举报
回复
procedure SetColWidth(adbgrdCtl: TDBGridEh; pMinWidth: Integer = 50; pFieldWidthList: String = '');
Const
WIDTH_PER_CHAR = 7;
Var
i: Integer;
ColWidth: Integer;
WidthList: TStringList;
procedure SetDefaultWidth();
Var
FieldName: String;
j: Integer;
begin
FieldName := adbgrdCtl.Columns[i].Title.Caption;
//处理多行显示标题
for j := Length(FieldName) downto 1 do
if FieldName[j] = '|' then
begin
FieldName := RightStr(FieldName,Length(FieldName) - j);
break;
end;
ColWidth := Length(FieldName) * WIDTH_PER_CHAR;
if ColWidth < pMinWidth then adbgrdCtl.Columns[i].Width := pMinWidth
else adbgrdCtl.Columns[i].Width := ColWidth;
end;
begin
WidthList := nil;
if pFieldWidthList <> '' then
begin
WidthList := TStringList.Create;
WidthList.CommaText := pFieldWidthList;
end;
try
for i := 0 to adbgrdCtl.Columns.Count - 1 do
begin
adbgrdCtl.Columns[i].Title.Alignment := taCenter;

if WidthList = nil then
begin
SetDefaultWidth;
continue;
end;

if WidthList.Values[adbgrdCtl.Columns[i].FieldName] = '' then
SetDefaultWidth
else adbgrdCtl.Columns[i].Width := StrToInt(WidthList.Values[adbgrdCtl.Columns[i].FieldName]);
end;
finally
if WidthList <> nil then WidthList.Free;
end;
end;

这段代码会根据你字段名称的长度来定制列宽,看看能不能帮你一下。

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧