如何在 QuickRpt 中计算每页中指定字段的值!
谢谢!

解决方案 »

  1.   

    是要小计每页的值? or 在报表最后来个合计?
    如果是第一种的话,控制好每页的条数后在OnNeedData中手工计算一下
    第二种的话,加上个Summary就好了
      

  2.   

    你按照下面的方法做,你就会有所体会
     :TQRGroup、TQRExpr组件的应用   该报表先列出州名,接着列出该州的所有公司及公司总数,一个州列完后空一行(Group中断),列出新的州名,接着列新州下的所有公司,没有填州名的公司统一列在“不清楚什么地区的”下面。 
             1)新建一个Project。 
             2)放一个TQuery在TForm上,其SQL属性为:select * from customer order by State,Company,即根据州、公司排序,DatabaseName为BCDEMOS,Active为true。 
            3) 放一个TQuickRep控件在Form1上,DataSet为Query1。
            4)放一个TQRBand在TQuickRep上面,把其BandType设成rbDetail。5)放一个TQRGroup控件在TQuickRep上,这时默认为Group Header。(任何时候当Group中断或更高级别的Group中断,这个Header都将打印出来,如果有表达式,根据表达式的值显示内容),接着添加一个Group Footer Band,但我们却不能找到这样的一个组件,那应该如何设计出Group Footer Band区段呢?我们只要放一个QRBand2在报表上,把TQRGroup的FooterBand属性指向QRBand2,看一下,QRBand2是不是变成了Group Footer Band 。(TQRGroup的一个重要特性是表达式,任何时候当表达式的值改变时,Group都将中断,如表达式是按省列出城市名,当前列出辽宁省,当属于辽宁省的城市列完后,表达式值改变,这时Group中断,接着显示其他省的城市名),TQRGroup1的Expression属性设为Query1.State(根据不同的州来中断)。注意:为什么不直接再放一个TQRGroup,因为无论我们放多少个系统都会默认为 Group Header。
           6)放一个TQRExpr控件在Group Header上面,其Expression属性为:IF(Query1.State <> '',Query1.State,'不清楚什么地区的'),即如果公司的州没填,就归入“不清楚什么地区的”,否则归入具体的州。
           7)放三个TQRDBText在Detail上,他们的DataSet都指向Query1,DataField分别指向Company、Contact、Phone。
           8)再放一个TQRExpr控件在Group Footer  Band上面,Expression为Query1.State+'共有:'+STR(COUNT)+’个公司’,作用是在每个州的公司列完后显示这个州总共有多少个公司。 
           9)把鼠标放在QuickRep组件上(不能放在Band区段上),按右键选预览,应该看到不同的州名及其公司名称和该州公司总数。注意:大家发现看到并不是每个州公司的总数,每个州后列出的都是把上一个州的总数也加上的累计值,难道是我们错了,没有,检查一下你的Expression组件(运行COUNT那个)的ResetAfterPrint的属性值是否为true,如果不是把他改为true,现在看一下J进一步思考:每一组内容都联在一起,有些不爽,要是每组内容之间被什么分隔开就好了?其实这并不难实现,我们只要把QRBand2(group Footer)的HasChild属性设为true就可以了。当然你直接把一个TQRChildBand组件放在QuickRep1上,把她的ParentBand属性设置为QRBand2,同样可以实现上面的设置。另外我们同样可以在TQRChildBand布置其它可视化组件J进一步思考:要是每组结束后就换页,那不是更爽吗?只要我们把QRGroup1的ForceNewPage属性改为true就可以了,同样的组件还有一个ForceNewColumn。但一定要注意,我们改了哪个区段的这两个属性,就从哪个区段开始NewPage/NewColumn。