将dbgrid的列宽调整为该列字段最多文字的宽度。
解决方案 »
- 关于Web连接delphi
- 在线程中创建自定义类的实例时报 abstract error
- {{{{{{{{{{{{{{{{{{{{{{{{{[突然多了条裤衩了,惊喜之余放分纪念一下]}}}}}}}}}}}}}}}}}}}}}}}}
- 我想在一个窗口中检索它所有的tPanel控件,应该怎么办?
- 请问有哪种反编译程序能将Delphi的*.dcu文件反编译出相应的*.pas文件和*.dfm文件?
- 问一下,我回复的帖子明明给我分了,怎么系统不给我加上呢?
- 电子病历的自动生成
- 请教在STRINGGRID中如何让鼠标移到某行该行便反选?
- 怎么样才能查到自己的上网IP地址啊???急用啊
- 超简单的问题:如何判断一串字符串中是否含有非数字的东西(我还是在等待)
- delphi用什么控件可以读取网页的数据?
- dbgrideh列宽问题??
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;这段代码会根据你字段名称的长度来定制列宽,看看能不能帮你一下。
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;
Dbgrideh1.Columns[i].OptimizeWidth;
//可以搞定打开后列宽为最小值,不必担心空白区域较大问题