to duanli
你这哪里是动态生成报表?!看看/demos/runtime,什么是“动态”,害我1小时时间!
解决方法如下:
--------------
1. 先通过“数据字典”建立一个变量[eventtype],并关联到DM.ADOQry."eventtype"
(先点一下eventtype,再点一下DM.ADOQry."eventtype"即完成关联)
2. 点击Rich3的memo,在弹出的窗口下方(script)中输入:
begin
if [eventtype]='2' then
visible:=false
else
visible:=true;
end
------
题外话:提问时一定要讲清楚自己的问题,以免浪费各自的时间。如果真是动态生成报表,
问题还不好解决。
To ty123:
您好,我根据您的注释在程序中实现了该功能,但是还有一点点的小问题,就是将visible 的属性改为false后,我报表中的memo有关的边框没了。我是否可以将memo的内容该为‘’,即为一个空值,而不是将其visible的属性置为false,这种情况下,代码如何写?
还有我的报表设计如下:
页头
分头组
主项数据
分脚组
子(child)
在分组脚中onbeforeprint中的代码如下:
while (Freespace>50)do
begin
showBand(child1)
end
end
child1为一个设置好的表格行,高度定为某一基础的表格高度,这样当内容不足一页时,我会自动的在后面补上该child1,形成一个类似于表格的样式,但问题是我无法将某些在frRichView控件中显示的内容在大于一行的情况下,将内容按照child1的高度自动将文本分成相应的行,并用横线分开。如下所示,希望显示的效果:
--------------------------------
a b c
----------------------------------------------------------------
c d f
----------------------------------------------------------------
dd dd dd
----------------------------------------------------------------
dd
----------------------------------------------------------------
现在我的显示效果是
--------------------------------
a b c
----------------------------------------------------------------
c d f
----------------------------------------------------------------
dd dd dd
dd
----------------------------------------------------------------
这个问题困惑我很久了,如果您能为我解决的话,分好说,我还将给您加分。
我知道你的意思了,对不起,第一次没看清楚,不需要那么复杂的。
在TfrReport的OnGetValue中写代码。
这是我程序中的一段代码你看看,可能对你有用。
procedure Tfrayw_ddcx.frpyw_ddcxGetValue(const ParName: string;
var ParValue: Variant);
begin
if ParName = 'adoq_ddcx."jsfs"' then
begin
if not adoq_ddcx.FieldByName('jsfs').IsNull then
begin
case adoq_ddcx.FieldByName('jsfs').AsInteger of
1: ParValue := '按数量计算';
2: ParValue := '按体积计算';
end;
end;
end;
if ParName = 'adoq_ddcx."ddxz"' then
begin
if not adoq_ddcx.FieldByName('ddxz').IsNull then
begin
case adoq_ddcx.FieldByName('ddxz').AsInteger of
1: ParValue := '新订单';
2: ParValue := '索赔订单';
3: ParValue := '来料自加工';
4: ParValue := '来料外加工';
5: ParValue := '订单转发';
end;
end;
end;
end;
To hnlygtjj
您好,看到您的代码,但由于ongetvalue函数我没有用过,但是你的代码我基本明白意思,即根据输入参数的不同,返回不同的parvalue值,我的程序实际上也是根据得到数据集中的某一个字段,来动态的控制另一个字段的显示值,比如如果其中有一个字段的值为‘XX值班’时,我需要控制另一个时间的字段的内容,即原来有时间的,我需要将它重新更改值后再显示,所以我想问您的是,得到的parvalue如何使用?朋友可否说得更清楚些?谢谢
OnGetValue是TfrReport的一个事件, parvalue是在报表中要显示的值,按你的意思应该在OnGetValue事件中是这样的:
if ParName = 'dataset."值班时间字段"' then
begin
if not dataset.FieldByName('值班人员字段').IsNull then
begin
if dataset.FieldByName('值班人员字段').AsString = '**值班' then
ParValue := '2003-09-15';//在这里改这你需要的值,而不是从数据集中取值
end;
end;
在这里衷心感谢以上回答我问题的各位朋友,特别是ty123和hnlygtjj,最终我按照hnlygtjj的方法实现了上面的功能,但是我想在我的报表中我需要实现以下的显示效果,即
在个别字段内容大于一行的情况,能够自动加上横线,形成表格的样式。具体的情况如下:
还有我的报表设计如下:
页头
分头组
主项数据
分脚组
子(child)
在分组脚中onbeforeprint中的代码如下:
while (Freespace>50)do
begin
showBand(child1)
end
end
child1为一个设置好的表格行,高度定为某一基础的表格高度,这样当内容不足一页时,我会自动的在后面补上该child1,形成一个类似于表格的样式,但问题是我无法将某些在frRichView控件中显示的内容在大于一行的情况下,将内容按照child1的高度自动将文本分成相应的行,并用横线分开。如下所示,希望显示的效果:
--------------------------------
a b c
----------------------------------------------------------------
c d f
----------------------------------------------------------------
dd dd dd
----------------------------------------------------------------
dd
----------------------------------------------------------------
现在我的显示效果是
--------------------------------
a b c
----------------------------------------------------------------
c d f
----------------------------------------------------------------
dd dd dd
dd
----------------------------------------------------------------
如果有哪位朋友乐意为我解决的话,我可以另开一个帖子,再给分。