| 1.上方是自由表头(Freeform)的分页器, 该分页器和报表的 ds1 数据源绑定； 2.此处的分页器和树列表(Treelist)用到的分页器是同一个东西，原理相近，您也可以参考树列表的分页显示的例子；

| 3.中心数据源的报表也可以使用分页，可打开另一个使用了中心数据源报表:

1.分页器的 XML描述文件：
2.源码如下：

    var count=0;
    function OnReady(id)
    {
     count++;
     if(count != 2) return;

     //2个控件都打开各自的模板
     AFPager.func("Build", "treelist/pager3.xml");
     AF.func("Build", "report/xmlsheet11.xml");
     //取得 ds1 数据源的句柄
     var h = AF.func("GetHandle", "ds1");
     //绑定, 一旦绑定将触发一个“Pager”分页事件
     AFPager.func("BindPager", h + "\r\n ID0 \r\n currentPage=0");
    }

    //事件入口
    function OnEvent(id, Event, p1, p2, p3, p4)
    {
     if(id=='AFPager' && Event == 'Pager') {
      //响应分页事件：仅需要执行计算
      AF.func("calc", "");
     }
    }

3.数据源的URL书写规则：
3.1. 可选规则一： URL中包含 "@rows" 和 "@startrow" (或 "@Page") 的宏。请打开该报表 ds1 数据源设置，可以看到其URL如下：
该数据源在取数时，分页器会将这3个宏替换成真正的数字的，这3个宏的含义为：每页行数、从第几行开始、页序；
3.2. 可选规则二： URL中包含名为 "rows" 和 "startrow" (或 "Page") 的属性，比如：
http://www.supcan.cn/DotNet/access.aspx?rows=12&startRow=12
当数据源取数时，分页器能将 rows 和 startRow、page 参数的值替换成真正的值，例如:
http://www.supcan.cn/DotNet/access.aspx?rows=20&startRow=0
3.3. 可选规则三： URL中不包含上述分页参数或宏，比如：
http://www.supcan.cn/DotNet/access.aspx
当数据源取数时，分页器会去修改这个URL，追加 rows、startRow 和 page 参数，例如:
http://www.supcan.cn/DotNet/access.aspx?rows=20&startRow=0&page=0
4.数据源返回的数据的格式：
XML或JSON数据中，须包含名为 "totalRows" 的属性，即总行数，用于分页器的初始构造，写法请对照本例的真实XML数据: http://www.supcan.cn/DotNet/access.aspx?startRow=0&rows=5
也可以采用其它的写法，文档请参见树列表的文档: 6.分页/6.2 总行数.