当前位置:主页>销售管理软件> 列表

如何在DBGgrid中显示的数据每列的宽度和它的数据库字段 找会计电算化软件下载

库存管理软件版1楼: 如题,如果我用adoquery取出数据后(select * from docdsp)
我想它在dbgrid中显示的宽度和数据库中的字段大小的值一样,能自适应它的宽度,不用Column.width中的值


一分都没分了 ,就20分了

2楼: ///////源代码开始
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 }
///////源代码结束

///////使用示例开始
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;
///////使用示例结束 如会计电算化软件下载

3楼: 帮顶!

4楼: to ron_xin,
不好意思,我说的不是自适应宽度,
我想列出来的数据就是数据库中字段值宽度如(char(10))就是10宽度(定死的宽度而不是自适应的宽度)


如何实现? 我想应该没有这么麻烦吧!

5楼: 设计时期不要设计 DBGrid 的各列,也不要指定 DBGrid.DataSource。在运行时期,打开DataSet后,再指定DBGrid.DataSource,那么DBGrid会自动生成各列,标题和宽度都是你要求的那个样子了。

6楼: 多人接受答案了。