如何让DBGRID列的宽度自适应???

michaelpeng7799 2002-08-15 05:26:35
本来就两三个字长度的字段,在DBGRID里一显示出来列宽太多了
以至于后面的字段都没在显示出来,还得按滚动条,能不能
让DBGRID的列宽自适应,或是用程序什么的在显示出来前调合适了??
...全文
237 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaidu 2002-09-24
  • 打赏
  • 举报
回复
//from
http://kingron.myetang.com/zsfunc0w.htm

(*//
标题:数据网格自动适应宽度
说明:使用DBGrid不可不看
设计:Zswang
日期:2002-03-04
支持:wjhu111@21cn.com
//*)

///////Begin Source
uses
Math;

function DBGridRecordSize(mColumn: TColumn): Boolean;
{ 返回记录数据网格列显示最大宽度是否成功 }
begin
Result := False;
if not Assigned(mColumn.Field) then Exit;
mColumn.Field.Tag := Max(mColumn.Field.Tag,
TDBGrid(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText));
Result := True;
end; { DBGridRecordSize }

function DBGridAutoSize(mDBGrid: TDBGrid; mOffset: Integer = 5): Boolean;
{ 返回数据网格自动适应宽度是否成功 }
var
I: Integer;
begin
Result := False;
if not Assigned(mDBGrid) then Exit;
if not Assigned(mDBGrid.DataSource) then Exit;
if not Assigned(mDBGrid.DataSource.DataSet) then Exit;
if not mDBGrid.DataSource.DataSet.Active then Exit;
for I := 0 to mDBGrid.Columns.Count - 1 do begin
if not mDBGrid.Columns[I].Visible then Continue;
if Assigned(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 }
///////End Source

///////Begin Demo
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
DBGridRecordSize(Column);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DBGridAutoSize(DBGrid1);
end;
///////End Demo
树_皮 2002-08-15
  • 打赏
  • 举报
回复
for i:=0 to FieldCount-1 do
begin
if fields[i].asstring ='' then
fields[i].dispwidth :=10
else
fields[i].dispwidth :=length(Fields[i].asstring);
end
wjlsmail 2002-08-15
  • 打赏
  • 举报
回复
能不能在永久列属性中做些设置?
yhj78 2002-08-15
  • 打赏
  • 举报
回复
除了自己通过程序语句,一个一个的控制不知道还有什么好办法?

等待高人指点。
xjl 2002-08-15
  • 打赏
  • 举报
回复
能吗?
我也想学一招
largeout 2002-08-15
  • 打赏
  • 举报
回复

DBGridName.Items[xxx].width:=xxx;
来设置,值要自己找了,我没有试过,关注

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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