dbgrid类控件可以动态改变列宽 但如何才能让每列的宽=实际数据库列中最大宽度拉?
也就是说比如dbgrid.coulmns[1]列中默认宽度是等于字段设计宽度的 但如何让dbgrid列宽等于实际数据最大宽度 如何求这个最大列宽度 让dbgrid.coulmns[n].wigth能动态自动适应?有人知道么?
也就是说比如dbgrid.coulmns[1]列中默认宽度是等于字段设计宽度的 但如何让dbgrid列宽等于实际数据最大宽度 如何求这个最大列宽度 让dbgrid.coulmns[n].wigth能动态自动适应?有人知道么?
解决方案 »
- 如何结合HOTKEY组件修改系统热键?
- TQUERY的OnCalcFields事件不触发是怎么回事??
- 求助各位高手!MDI子窗体引发异常,运行时错误
- 求一个简单的程序
- 如何以动画的 形式现实统计出的数据?
- AdoQuery组件的SQL属性可以使用Update语句吗?
- 基础问题:用的是Access数据库,Fields[0]的类型应该是什么啊,请大家进来看一下,谢谢啊!
- 救我
- 各位大虾:如何将图片资料保存到数据库中?如何在image和DBimage控件中读取TIFF格式的图片?
- 图像格式问题求救?我该用什么流来存放?急急!!
- 英雄有难!!诚邀各位MM相助!NND,什么是鹰什么眼?
- 程序员为什么要自相残杀?
{ 返回记录数据网格列显示最大宽度是否成功 }
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 TserverFrm.DBGridAutoSize(mDBGrid: TDBGrid; mOffset: Integer = 12): 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 }
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
DBGridRecordSize(Column);
end;
var
i,wid:integer;begin
//标题居中
for i:=0 to dbgrid1.FieldCount-1 do
begin
dbgrid1.Columns[i].Title.Alignment:= taCenter;
end; wid:=0;
for i:=0 to dbgrid1.Columns.Count-1 do
begin
dbgrid1.Columns[i].Alignment:=taCenter;
wid:=wid+ dbgrid1.Columns[i].Width;
end;
if wid < dbgrid1.Width then
begin
for i:=0 to dbgrid1.Columns.Count-1 do
begin
dbgrid1.Columns[i].Width:=dbgrid1.Columns[i].Width+(dbgrid1.Width-wid)div(dbgrid1.Columns.Count)-1 ;
end;
end
else
begin
DBGridAutoSize(DBGrid1);
//dbgrid1
end;
然后根据这个长度乘以某个数字(一个字符要多宽)。