conanca
conanca
2008-11-06 09:38

请教个Birt的问题,如何实现这样的效果,传入的查询参数为以逗号隔开的多个字符串...

已采纳

数据集查询语句这样写的 select * from T1 where ID in (?)

数据集参数是ID——值绑定到报表参数:ID



报表是这样设计的: 一个grid里,几个单元格里分别放 dataSetRow["NAME"] 这样的数据。



我传给报表的参数(ID)是"01,02,03,04"



这样的话,预览它会显示为空。



如果只传一个参"01"的话,预览它会正常显示grid中的数据——ID为01的那条记录的数据



请问能不能实现这样的效果,让报表预览时,会看到分别ID为01,02,03,04 的记录的数据的4个GRID,并且分4页显示。



谢谢!


问题补充:
数据集查询语句这样写的 select * from T1 where ID in (?)


数据集参数是ID——值绑定到报表参数:ID





报表是这样设计的: 一个grid里,几个单元格里分别放 dataSetRow["NAME"] 这样的数据。





我传给报表的参数(ID)是"01,02,03,04"





这样的话,预览它会显示为空。





如果只传一个参"01"的话,预览它会正常显示grid中的数据——ID为01的那条记录的数据





请问能不能实现这样的效果,让报表预览时,会看到分别ID为01,02,03,04 的记录的数据的4个GRID,并且分4页显示。





谢谢!








以下是问题补充:

谢谢大家的关注。

2楼能不能说详细些呢?谢谢
问题补充:
数据集查询语句这样写的 select * from T1 where ID in (?)


数据集参数是ID——值绑定到报表参数:ID





报表是这样设计的: 一个grid里,几个单元格里分别放 dataSetRow["NAME"] 这样的数据。





我传给报表的参数(ID)是"01,02,03,04"





这样的话,预览它会显示为空。





如果只传一个参"01"的话,预览它会正常显示grid中的数据——ID为01的那条记录的数据





请问能不能实现这样的效果,让报表预览时,会看到分别ID为01,02,03,04 的记录的数据的4个GRID,并且分4页显示。





谢谢!







我现在新建了个List 把那个Grid放到Detail里,但是预览显示为空

后来又试了Table 把Grid放到Detal Rows里,依然不起作用

传的参数 也试了 '01','02','03','04'的形式,还是不起作用
问题补充:
我已经解决这个问题了!



方法如下:



删掉数据集中,查询语句中的where子句,然后删掉数据集参数



我们不用 问号 (where id in(?)) 这种方式了



改用 筛选器的方式:



在结果集中 新建一个筛选器,选自相应的字段id, 选择in,选择报表参数id



然后保存预览,输入参数 01,02,03,04 (带不带单引号都行)



锵~~



效果实现啦! 显示4页,每页显示相应的GRID及其中的数据



感谢大家的关注!



关键字:birt  分页 套打 数组参数
问题补充:
我再补充一下



不知为什么,今天再用时,又出不来了。



如果把报表参数类型改为列表框(必需,多选,动态值取自不带过滤器的数据集),才能实现,但是只能鼠标点选参数,无法传字符串参数。。。



所以不再使用上面的方法了。



又发现新的方法了



不用筛选器也不用数据集参数。改用数据集脚本



选择 afteropen事件,脚本如下



var ids = params["id"];



this.queryText="selete id,name from t1 where id in("+ids+")"



保存,预览,输入形如'01','02','03' (一定要加引号)的参数



锵!~



实现预期效果!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

10条回答

  • iteye_2429 iteye_2429 13年前

    结贴子

    点赞 评论 复制链接分享
  • iteye_2429 iteye_2429 13年前

    用?当然会防止注入了攻机了
    的所以 "'a','b'"这种写法也是没用的.
    多加几个问号吧
    在传参时
    如果个数不够补0完成

    点赞 评论 复制链接分享
  • linpyi linpyi 13年前

    你SQL打印出来在控制台上运行,看会不会查询的到数据

    点赞 评论 复制链接分享
  • cfy_9310guo cfy_9310guo 13年前

    在detail row里面, 选择属性page break, 选择after的always选项

    这个属性是控制在报表item之后翻页的

    点赞 评论 复制链接分享
  • linpyi linpyi 13年前

    [code="java"]
    我传给报表的参数(ID)是"01,02,03,04"

    你应该传 ('01','02','03','04')
    in 的写法是 where id in ('01','02','03','04')
    而不是("01,02,03,04")
    [/code]

    点赞 评论 复制链接分享
  • linpyi linpyi 13年前

    先确定你的SQL有没问题,好象in是像楼上所说的使用in ('01','02').
    先把你的SQL写在管理器上,确定能执行

    我认为你的问题应该就是数据没有查询出来

    点赞 评论 复制链接分享
  • cfy_9310guo cfy_9310guo 13年前
    1. 预览为空, 可能是参数问题, 01,02,03,04是不是String类型? 应该用引号分隔的吧, 象"'01','02','03','04'" 2.不是用grid, 应该用table, 然后根据ID分组, 分组设置里面有pagebreak属性, 设置一下
    点赞 评论 复制链接分享
  • iteye_2429 iteye_2429 13年前

    不知道你用的报表是不是动态的.如果是动态的,有可能会支持这样子的语法
    dataSetRow[1]["NAME"]

    点赞 评论 复制链接分享
  • wqs1010 松月 8年前

    楼主,应该是先选中 数据集 再选中脚本
    然后选 beforeOpen 才可以吧!

    点赞 评论 复制链接分享
  • wqs1010 松月 8年前

    一直困扰的问题 终于在这里解决了,谢谢了!

    点赞 评论 复制链接分享

相关推荐