N-Up类型数据窗口各种方式的序号列的添加

         对于N-Up类型的数据窗口,其序号列的布局一直是大家热衷于讨论的话题。

         假设有如下3栏数据

                  数据                       数据                       数据  
=========================================================================================
                  A                          B                          C
                  D                          E                          F
                  G                          H                          I
                  J                          K                          L
                  M                          N                          O        (第一页)
                  P                          Q                          R
                  S                          T                          U
                  V                          W                          X  
                  Y                                                              (第二页)


        如果需要增加序号列,有如下三种规则。任何一种规则都必须分别添加3个计算列,假设分别为xh1,xh2,xh3

        (1)从左到右,由上及下

        这种排序规则比较简单,和N-Up默认的数据排序规则是一致的,3个计算列的具体expression写法分别为: 

        <1> xh1:getrow() + 0

        <2> xh2:getrow() + 1 

        <3> xh3:getrow() + 2

        规律就是对应第N栏的序号列的表达式为:getrow() + N - 1

        增加序号列后的数据如下:  

        序号      数据             序号      数据              序号      数据  
=========================================================================================
        1         A                2         B                3         C
        4         D                5         E                6         F
        7         G                8         H                9         I
        10        J                11        K                12        L
        13        M                14        N                15        O        (第一页)
        16        P                17        Q                18        R
        19        S                20        T                21        U
        22        V                23        W                24        X  
        25        Y                                                              (第二页)

 

        (2)由上及下,从左到右

        这种排序规则是开发人员遇得比较多的需求,这种需求下,3个计算列的具体expression写法分别为: 

        <1> xh1:(getrow() - 1) / long(describe("datawindow.rows_per_detail")) + 1

        <2> xh2:1 * ceiling(rowcount() / long(describe("datawindow.rows_per_detail")))  - sign(mod(rowcount(), long(describe("datawindow.rows_per_detail")) )) * (1 - mod(rowcount(), long(describe("datawindow.rows_per_detail")) )) + (getrow() - 1) / long(describe("datawindow.rows_per_detail")) + 1 

        <3> xh3:2 * ceiling(rowcount() / long(describe("datawindow.rows_per_detail")))  - sign(mod(rowcount(), long(describe("datawindow.rows_per_detail")) )) * (2 - mod(rowcount(), long(describe("datawindow.rows_per_detail")) )) + (getrow() - 1) / long(describe("datawindow.rows_per_detail")) + 1       

        规律就是对应第N栏的序号列的表达式为:(N - 1) * ceiling(rowcount() / long(describe("datawindow.rows_per_detail")))  - sign(mod(rowcount(), long(describe("datawindow.rows_per_detail")) )) * ((N - 1) - mod(rowcount(), long(describe("datawindow.rows_per_detail")) )) + (getrow() - 1) / long(describe("datawindow.rows_per_detail")) + 1

        增加序号列后的数据如下:

        序号      数据             序号      数据              序号      数据  
=========================================================================================
        1         A                10        B                18        C
        2         D                11        E                19        F
        3         G                12        H                20        I
        4         J                13        K                21        L
        5         M                14        N                22        O        (第一页)
        6         P                15        Q                23        R
        7         S                16        T                24        U
        8         V                17        W                25        X  
        9         Y                                                              (第二页)

 

        (3)由上及下,从左到右,且同一页面不同栏目之间的序号必须连续

        当开发人员按照客户需求,将序号列的显示规则更改为(2)所示方式后,客户往往会提出新的要求:打印出来的数据,存在多页纸的情况下,同一张纸中的序号,左右不连续。这种需求下,3个计算列的具体expression写法分别为: 

        <1> xh1:(getrow() - first(getrow() for page)) / long(describe("datawindow.rows_per_detail")) + first(getrow() for page)

        <2> xh2:1 * ceiling(count(1 for page) / long(describe("datawindow.rows_per_detail")))  - sign(mod(count(1 for page), long(describe("datawindow.rows_per_detail")) )) * (1 - mod(count(1 for page), long(describe("datawindow.rows_per_detail")) )) + (getrow() - first(getrow() for page)) / long(describe("datawindow.rows_per_detail")) + first(getrow() for page) 

        <3> xh3:2 * ceiling(count(1 for page) / long(describe("datawindow.rows_per_detail"))) - sign(mod(count(1 for page), long(describe("datawindow.rows_per_detail")) )) * (2 - mod(count(1 for page), long(describe("datawindow.rows_per_detail")) ))+ (getrow() - first(getrow() for page)) / long(describe("datawindow.rows_per_detail")) + first(getrow() for page)

        规律就是对应第N栏的序号列的表达式为:(N - 1) * ceiling(count(1 for page) / long(describe("datawindow.rows_per_detail")))  - sign(mod(count(1 for page), long(describe("datawindow.rows_per_detail")) )) * ((N - 1) - mod(count(1 for page), long(describe("datawindow.rows_per_detail")) )) + (getrow() - first(getrow() for page)) / long(describe("datawindow.rows_per_detail")) + first(getrow() for page) 

        增加序号列后的数据如下:

        序号      数据             序号      数据              序号      数据  
=========================================================================================
        1         A                6         B                11        C
        2         D                7         E                12        F
        3         G                8         H                13        I
        4         J                9         K                14        L
        5         M                10        N                15        O        (第一页)
        16        P                20        Q                23        R
        17        S                21        T                24        U
        18        V                22        W                25        X  
        19        Y                                                              (第二页)


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值