用DBGrid控件和数据库连接起来显示数据库中的记录时,DBGrid的每一列的宽度和在数据库中字段的宽度有关,有时显示出来的内容很短,但是DBGrid的列很宽,这样不好看。能不能让DBGrid中某一列的宽度自动适应显示内容的宽度?就和label控件的autosize差不多?
解决方案 »
- 哎,一声叹息,搞了6年的共享软件,没得搞了,想做移动开发了
- 有关数据库插入的操作?
- spcomm在98系统下怎么读取的数据不完整?
- form显示的问题?
- 解决多层应用开发棘手问题-多用户并发存盘
- 如何利用ADO控件在同一个MDB文件中备份数据表
- 极其郁闷!不学精DELPHI誓不为人!@
- 请问谁有用纯API函数发送邮件的源程序啊~~~~~~
- 怎样在另一FORM里调用UNIT的一个函数,并给他这样的输入参数:已打开的的ADO数据库表、已初始化的树视图控件,还有数据库的字段
- 程序员能做到三十吗?
- 如何把异步事件变为同步,可否用回调函数实现?
- ADO连接SQL数据库时,在数据库链接属性里面,找不到sql的驱动,为什么?要怎样安装上去?
{ 返回记录数据网格列显示最大宽度是否成功 }
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 }
///////源代码结束
{列宽}
procedure TForm1.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
DBGridRecordSize(Column);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DBGridAutoSize(DBGrid1);
end;