为何我的DBGrid的Columns.Width属性不能改变?(50分)

L

lzhpro

Unregistered / Unconfirmed
GUEST, unregistred user!
Form1中有DBgrid1
在Form1.Create中设置:
DbGrid1.Columns.add;
DbGrid1.Columns[0].width:=80;
显示的Width却是我想要的,Why?
 
DbGrid1.Columns[0].Displaywidth:=80;
 
DBGrid1.Columns[1].Width :=10;
可以实现功能呀,我实验了。能详细说一下吗?
 
不会吧,未标明标识符"DisPlayWidth"
 
就是Width,可以的。
 
DisplayWidth是 Fields的属性,也可以设置DBGrid的,但是属于间接设置了。
 
yzhshi:
在Form1Create中用"程序代码"设置Width属性
 
可以的。不过这个数字是有范围的。太大了就没用了。
不过一般来说我们喜欢用Dataset的永久字段的displaywidth来实现。
 
没错,可以的。
直接写代码DBGrid1.Columns[0].Width :=10;就可以的。

 
yzhshi:
能说说 DisplayWidth 如何“间接设置”吗?
 
各种方式:
1、动态添加字段、设置宽度
2、设置已有字段宽度
a.数据库没有打开
b.数据库已经打开
几种情况都实验了,都可以的呀。能具体说一下你的操作吗?
 
不好意思啊,不如我们说说如何设置字段Width属性,
ranking:
Dataset的永久字段的displaywidth来怎么做来的?
我有空试试,不过您能举个例子就好了
 
所谓的“间接设置”,是我自己明明的,呵呵。
就是说通过设置Query的Fields的DisplayWidth属性,来改变与之相连的DBGrid的宽度。
这是需要DBGrid的宽度为默认的或者DBGrid没有手工添加字段。
就是说如果你的DBGrid的Column的宽度不是64,他就不认的。
所以不推荐这么做。
 
type
TFieldRec = record
mTitle : String;
mFieldName : string;
mWidth : Integer;
end;
var
i:integer;
mField : array[0..11] of TFieldRec;

begin
mField[0].mTitle := '编号';
mField[0].mFieldName := 'ID';
mField[0].mWidth := 80;

mField[1].mTitle := '日期';
mField[1].mFieldName := 'mDate';
mField[1].mWidth := 120;

mField[2].mTitle := '地区编码';
mField[2].mFieldName := 'ZoneID';
mField[2].mWidth := 80;

mField[3].mTitle := '地 区';
mField[3].mFieldName := 'City';
mField[3].mWidth := 150;

mField[4].mTitle := '县 市';
mField[4].mFieldName := 'County';
mField[4].mWidth := 150;

mField[5].mTitle := '乡 镇';
mField[5].mFieldName := 'CountySide';
mField[5].mWidth := 160;

mField[6].mTitle := '水用途分类代码';
mField[6].mFieldName := 'UseID';
mField[6].mWidth := 80;

mField[7].mTitle := '水用途总分类';
mField[7].mFieldName := 'WaterUse';
mField[7].mWidth := 160;

mField[8].mTitle := '水用途子分类';
mField[8].mFieldName := 'WtUseList';
mField[8].mWidth := 160;

mField[9].mTitle := '水用途二级分类';
mField[9].mFieldName := 'WtUseSubList';
mField[9].mWidth := 160;

mField[10].mTitle := '用水量';
mField[10].mFieldName := 'UseCount';
mField[10].mWidth := 160;

mField[11].mTitle := '备 注';
mField[11].mFieldName := 'Memo';
mField[11].mWidth := 160;

with DBG_BASSMESS do begin
Font.Height := -15;
Font.Name := '宋体';
TitleFont.Height := -15;
TitleFont.Name := '宋体';
Columns.Clear ;
//增加列
for i := Low(mfield) to High(mField) do begin
Columns.add;
with Columns do begin
FieldName := mField.mFieldName;
Width := mField.mWidth;
Visible := True;
Title.Caption := mField.mTitle;
Title.Color := $00DDDDDD;
Title.Font.Color := clWindowText;
Title.Font.Height := -15;
Title.Font.Name := '宋体';
Title.Alignment := taCenter;
// Title.Font.Style := [];
end;
end;
Refresh;
end;
 
你的应该可以的,实验一下下面的代码
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
Query1.Active := True;

with DBGrid1 do
begin
Font.Height := -15;
Font.Name := '宋体';
TitleFont.Height := -15;
TitleFont.Name := '宋体';
Columns.Clear;
//增加列
for i := 0 to Query1.Fields.Count - 1 do
begin
Columns.add;
with Columns do
begin
FieldName := Query1.Fields.FieldName;
Width := i * 10;
Visible := True;
Title.Caption := Query1.Fields.Name;
Title.Color := $00DDDDDD;
Title.Font.Color := clWindowText;
Title.Font.Height := -15;
Title.Font.Name := '宋体';
Title.Alignment := taCenter;
end;
end;
end;
end;
 
yzhshi:
你的代码可以实现,我想可以结分了。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
960
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部