如何动态显示dxdbgrid列的名称 ( 积分: 100 )

  • 主题发起人 主题发起人 夜黑风高
  • 开始时间 开始时间

夜黑风高

Unregistered / Unconfirmed
GUEST, unregistred user!
我自己写了一个过程,在同一个dxdbgrid里根据不同的数据源添加不同的列
procedure TfrmMain.DrawGridHead;
var
i: integer;
Column: TdxDBTreeListColumn;
begin
dxdbgrid1.DataSource := dszkcl;
dxdbgrid1.Bands[0].Destroy;
dxdbgrid1.Bands[0] := dxdbgrid1.Bands.Add;
dxdbgrid1.Bands[0].Fixed := bfleft;
dxdbgrid1.DataSource.DataSet := dszkcl.DataSet;
with dxdbgrid1.DataSource.DataSet do
begin
for i := 0 to FieldCount - 1 do
if Fields.Visible then
begin
if fields.DataType = ftFloat then
begin
Column := dxdbgrid1.CreateColumn(TdxDBGridCurrencyColumn);
TdxDBGridCurrencyColumn(column).DisplayFormat := ',0.###;-,0.000';
end
else
Column := dxdbgrid1.CreateColumn(GetdxDBGridColumnClass(Fields));
Column.FieldName := Fields.FieldName; {列的名字等于字段的名字}
Column.Width := Fields.DisplayWidth;
Column.HeaderAlignment := taCenter;
end;
end;


//显示中文字段名,并设置字段宽度

dxdbgrid1.Columns[0].Caption := '策略代码';
dxdbgrid1.Columns[1].Caption := '策略名称';
dxdbgrid1.Columns[2].Caption := '策略类型';
if ViewRuleType = 'W' then
dxdbgrid1.Columns[3].Caption := '转换系数'
else
dxdbgrid1.Columns[3].Caption := '所需积分';
dxdbgrid1.Columns[4].Caption := '启用标记';
dxdbgrid1.Columns[5].Caption := '启用日期';
dxdbgrid1.Columns[6].Caption := '备注';

dxdbgrid1.Columns[0].width := 57;
dxdbgrid1.Columns[1].width := 53;
dxdbgrid1.Columns[2].width := 57;
dxdbgrid1.Columns[3].width := 55;
dxdbgrid1.Columns[4].width := 58;
dxdbgrid1.Columns[5].width := 57;
dxdbgrid1.Columns[6].width := 110;

end;

最后的一段代码是将英文的字段名显示为中文,并设置表格字段的宽度
问题是,第一次运行的时候显示的很正常,但是一旦切换数据源过程的后半段就失效了
dxdbgrid依旧显示的是数据库英文的字段名,宽度也是挤在一块,都没改过了
第一次运行也是调用这个相同的过程,请问是什么原因?
 
为什么要这么写呢,把字段和名称,宽度保存到数据库里,再取出来不是很容易么!
 
就算保存到数据库里取出来后你怎么写?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部