在使用delphi有时候会遇到需要生成动态添加字段的报表,要达到这样的效果,需要几个控件配合使用:
TFunctionButton
MTable
MBBDBGrid
MDataSource
四者缺一不可,有了这几个控件后需要进行一些设置,
MBBDBGrid有一个缺点就是不能设置UseMultiTittle属性,不能显示多行的字段名,这样就不能设置复杂的表头,如果要实现这个效果就需要使用TDBGridEH控件,
把MBBDBGrid的 DataSource设成和MBBDBGrid通一个数据源,这样就可以显示复杂的标题。但是这样会带来一个问题,当关闭界面退出程序的时候就会报错,
这时候需要在界面的FormDestroy时间中清除掉MTable的数据:
MTable1.Close;
MTable1.EmptyTable;
结合这几个控件就可以实现美观的动态添加字段的报表。
下面是使用的范例:
MTable1:=FunctionButtons1.BBSourTable;
with MTable1 do
begin
Close;
for I:=0 to FieldCount-1 do Fields[0].Free;
with FieldDefs do
begin
Clear;
Add('YYMM', ftString, 12, False);
Add('hj_xy_cl', ftInteger,0, False);
Add('hj_XY_TS', ftFloat, 0, False);
//在这里可以动态添加字段
end;
CreateTable; //创建表格(很关键)
for I:=0 to MTable1.FieldDefs.Count-1 do
MTable1.FieldDefs.Items[I].CreateField(Report);
//在这里可以设置字段的DiaplayWidth和DisplayLabel属性
end;
MTable1.Active:=True; //添加完字段之后才能激活Mtable,否则会出现invalid parameter错误
FunctionButtons1.HasRunCreateField:=True;
FunctionButtons1.ConditionHasChanged:=True; //这两句也很关键