借助于repeater实现自动分页的WEB打印功能

    技术2022-05-11  137

    刚才在洗衣服时,我在想:好久,我没有动“笔”写东西了,脑子也开始好像慢慢地缺乏了整理,像我们自己用久的了硬盘一样,性能日趋下降;从两年前用了PETSHOP1.0模式给某政府单位开发了一个网络OA后,我再也没有很认真来考虑一些真正的关于.Net技术的问题,更不提现在的什么AJAX。自从去年前面的10个月的数据仓库项目开始后到现在,我觉得自己总是在忙忙碌碌,难得有闲时梳理自己的某些想法,越发觉得懒惰。Maybe,这是麻木的开始…….        前段时间,哥们接了个车辆管理系统,B/S架构的,他做了大部分,后到了北京去开某站点的垂直搜索引擎后,这单事落到了俺的身上(我在西南某个漂亮的地方)。废话有点多了,久不写了,思绪的点飘。。。哈哈 话归正题。在做之前,我先说下客户的要求:需要实现的功能很简单,就是统计本单位每一辆车的各种费用以及出车次数、事故次数。刚开始的思路是这样的,先在EXCEL定义好格式与各种统计指标,如这样<%#Department%> 表示部门,然后在逻辑上再以一个同名(为什么是同名呢?只是便于统计实体的映射了)的Department方法来实现数据的输出,通过遍历这标签(统计指标)我们就可以实现了EXCEL报表。但后来,因为实施过程碰到了些不确定因素,再加上客户说,每次启动EXCEL太慢了,这个问题也确实存在,再加数据的运算,这个方法在使用上对于客户来说是要有点耐心呢~~。     以前自己也用个控件实现个WEB的打印,但这个方案同样不适用于本项目,因为客户的计算机使用水平相对有点低,设置起来对于他们来说很麻烦,因此这个办法—Get Out! So,改!于是,我到网上看看有些什么东东我可以用的~~,一步入“江湖”,好不热闹!某些BadBoy说用WebBrowser做打印不错呢~,于是我也凑起热闹了。 找齐家伙: / 负责打印的家伙,我们可以将它放在打印表格的底部,我稍稍了解了一下它的用法,从网上Copy的,名字都没改~~,我也不知大概的出处在那里,没法注明这位仁兄的大名,不好意思了 <script language="javascript"> <!--//               function printsetup(){                      // 打印页面设置                      wb.execwb(8,1);               }               function printpreview()               {                      // 打印页面预览                      wb.execwb(7,1);               }                 function printit()               {                      if (confirm('确定打印吗?')) {                      wb.execwb(6,6)               }        } //--> </script> <OBJECT id=wb height=0 width=3 classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 name=wb > </OBJECT> <INPUT class= Noneadprinting οnclick=javascript:printit() type=button value=打印 name=button_print> <INPUT class= Noneadprinting οnclick=javascript:printsetup(); type=button value=打印页面设置 name=button_setup> <INPUT class= Noneadprinting οnclick=javascript:printpreview(); type=button value=打印预览 name=button_show> <input class= Noneadprinting οnclick=javascript:window.close(); type=button value=关闭 name=button> /表格样式,什么表头呀,每一行呀,ect. <style type=text/css>        .report_head { FONT-WEIGHT: bold; FONT-SIZE: 18pt; COLOR: #000000; TEXT-DECORATION: none }        .report_column { BORDER-TOP: #000000 1px solid; FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: #014e82; TEXT-DECORATION: none }        TD { BORDER-RIGHT: #ffffff 0px solid; BORDER-TOP: #ffffff 0px solid; FONT-SIZE: 11pt; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid }        TableHead { BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: #000000 } </style> /屏蔽多余的东东 <style media=print>        .Noneadprinting { DISPLAY: none }          .PageNext { PAGE-BREAK-AFTER: always } //这东西很可爱,分页就要靠它了~~ </style> 基于以上的东东,我们基本上可以做打印了。 我把先搭了个Frame: 在form里写好表头: <DIV class=report_head align=center>西电实业有限公司汽车运输分公司车辆使用统计报表</DIV> 接着定好统计项,装载数据等: < TABLE  class =TableHead  id =Table1  cellSpacing =0  cellPadding =3  width ="100%"  border =1 >                                      < TR  class ="report_column" >                                            < td  align =center  width =165  height =19 > 部门 </ td >                                            < td  style ="WIDTH: 193pt"  align =center > 车牌号码 </ td >                                            < td  style ="WIDTH: 179pt"  align =center > 车型 </ td >                                            < td  style ="WIDTH: 188pt"  align =center > 行程里程 </ td >                                            < td  style ="WIDTH: 120pt"  align =center > 总油耗 </ td >                                            < td  style ="WIDTH: 40pt"  align =center > 加油费 </ td >                                            < td  style ="WIDTH: 140pt"  align =center > 维修费 </ td >                                            < td  style ="WIDTH: 122pt"  align =center > 养路费 </ td >                                            < td  style ="WIDTH: 180pt"  align =center > 过路/桥费 </ td >                                            < td  style ="WIDTH: 54pt"  align =center > 洗车费 </ td >                                            < td  style ="WIDTH: 54pt"  align =center > 停车费 </ td >                                            < td  style ="WIDTH: 54pt"  align =center > 年检费 </ td >                                            < td  style ="WIDTH: 54pt"  align =center > 保险费 </ td >                                            < td  style ="WIDTH: 59pt"  align =center > 其它费用 </ td >                                            < td  style ="WIDTH: 40pt"  align =center > 总费用 </ td >                                            < td  style ="WIDTH: 150pt"  align =center > 出车次数 </ td >                                            < td  style ="WIDTH: 59pt"  align =center > 运营费用 </ td >                                            < td  style ="WIDTH: 59pt"  align =center > 事故次数 </ td >                                            < td  style ="WIDTH: 143pt"  align =center > 利用天数 </ td >                                            < td  style ="WIDTH: 80pt"  align =center > 利用率 </ td >                                     </ TR >                                                                                           < asp:repeater  id =vehiclesGrid  runat ="server" >                       < ItemTemplate >                              < TR >                                     < TD  height ="5"  width ="165" > <% # DataBinder.Eval(Container.DataItem, "Department.Name" %> </ TD >                                     < TD  height ="5"  style ='WIDTH:193pt' > <% # DataBinder.Eval(Container.DataItem, "Number" %> </ TD >                                     < TD  style ='WIDTH:179pt' > <% # DataBinder.Eval(Container.DataItem, "Type.TypeName" %> </ TD >                                     < TD  style ='WIDTH:188pt' > <% # DataBinder.Eval(Container.DataItem, "MilesRange" %> </ TD >                                     < TD  style ='WIDTH:120pt' > <% # DataBinder.Eval(Container.DataItem, "OilCountSum" %> </ TD >                                     < TD  style ='WIDTH:40pt' > <% # DataBinder.Eval(Container.DataItem, "GasCostSum" %> </ TD >                                     < TD  style ='WIDTH:140pt' > <% # DataBinder.Eval(Container.DataItem, "MaintainCostSum" %> </ TD >                                     < TD  style ='WIDTH:122pt' > <% # DataBinder.Eval(Container.DataItem, "MaitainRoadAndBridgeSum" %> </ TD >                                     < TD  style ='WIDTH:180pt' > <% # DataBinder.Eval(Container.DataItem, "RoadAndBridgeTollSum") %> </ TD >                                     < TD  style ='WIDTH:54pt' > <% # DataBinder.Eval(Container.DataItem, "WashCarCostSum") %> </ TD >                                     < TD  style ='WIDTH:54pt' > <% # DataBinder.Eval(Container.DataItem, "ParkCarCostSum") %> </ TD >                                     < TD  style ='WIDTH:54pt' > <% # DataBinder.Eval(Container.DataItem, "YearCheckCostSum") %> </ TD >                                     < TD  style ='WIDTH:54pt' > <% # DataBinder.Eval(Container.DataItem, "InsuranceCostSum") %> </ TD >                                     < TD  style ='WIDTH:59pt' > <% # DataBinder.Eval(Container.DataItem, "ElseCostSum") %> </ TD >                                     < TD  style ='WIDTH:40pt' > <% # DataBinder.Eval(Container.DataItem, "CostSum") %> </ TD >                                     < TD  style ='WIDTH:150pt' >                                            <% # DataBinder.Eval(Container.DataItem, "AssignmentCount") %>                                     </ TD >                                     < TD  style ='WIDTH:59pt' >                                            <% # DataBinder.Eval(Container.DataItem, "RunCost") %>                                     </ TD >                                     < TD  style ='WIDTH:59pt' > <% # DataBinder.Eval(Container.DataItem, "AccidentCounts") %> </ TD >                                     < TD  style ='WIDTH:143pt' >                                            <% # DataBinder.Eval(Container.DataItem, "AssignmentDays") %>                                     </ TD >                                     < TD  style ='WIDTH:80pt' >                                            <% # DataBinder.Eval(Container.DataItem, "AssignmentDaysRate") %>                                     </ TD >                              </ TR >                       </ ItemTemplate >                </ asp:repeater >         </ TABLE > 通过repeater的模板属性就已经实现了多记录的打印的功能,但我们的分页呢?在那呢?此我就作了以下的改动:   < script  runat =server >        public int nPageSize =10; //每页要打页的记录数       public int nRecordNum=0/ /作为分页点用 </ script > < TABLE  class =TableHead  id =Table1  cellSpacing =0  cellPadding =3  width ="100%"  border =1 > <%  if    (nRecordNum<=nPageSize)                                   {                             %>                                                          < TR  class ="report_column" >                                            < td  align =center  width =165  height =19 > 部门 </ td >                                            < td  style ="WIDTH: 193pt"  align =center > 车牌号码 </ td >                                            < td  style ="WIDTH: 179pt"  align =center > 车型 </ td >                                            < td  style ="WIDTH: 188pt"  align =center > 行程里程 </ td >                                            < td  style ="WIDTH: 120pt"  align =center > 总油耗 </ td >                                            < td  style ="WIDTH: 40pt"  align =center > 加油费 </ td >                                            < td  style ="WIDTH: 140pt"  align =center > 维修费 </ td >                                            < td  style ="WIDTH: 122pt"  align =center > 养路费 </ td >                                            < td  style ="WIDTH: 180pt"  align =center > 过路/桥费 </ td >                                            < td  style ="WIDTH: 54pt"  align =center > 洗车费 </ td >                                            < td  style ="WIDTH: 54pt"  align =center > 停车费 </ td >                                            < td  style ="WIDTH: 54pt"  align =center > 年检费 </ td >                                            < td  style ="WIDTH: 54pt"  align =center > 保险费 </ td >                                            < td  style ="WIDTH: 59pt"  align =center > 其它费用 </ td >                                            < td  style ="WIDTH: 40pt"  align =center > 总费用 </ td >                                            < td  style ="WIDTH: 150pt"  align =center > 出车次数 </ td >                                            < td  style ="WIDTH: 59pt"  align =center > 运营费用 </ td >                                            < td  style ="WIDTH: 59pt"  align =center > 事故次数 </ td >                                            < td  style ="WIDTH: 143pt"  align =center > 利用天数 </ td >                                            < td  style ="WIDTH: 80pt"  align =center > 利用率 </ td >                                     </ TR >                                                                      <%                                    } %>                       < asp:repeater  id =vehiclesGrid  runat ="server" >                       < ItemTemplate >                                                                               <%                                    nRecordNum++;                                                                      int nModPage=0;                                   Math.DivRem( nRecordNum ,nPageSize ,out nModPage);                                   if    (nModPage+1==1)                                   {                             %>                                     <! -―分页标志begin―― >                                     < TR  class ="PageNext" >                                            < td  colspan =20  class ="PageNext"  height ="0" ></ td ></ TR >                                     <! -―分页标志end―― >                                                                         < TR  class ="report_column" >                                                                                      < td  class ="report_column"  align =center  width =165  height =19 > 部门 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 193pt"  align =center > 车牌号码 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 179pt"  align =center > 车型 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 188pt"  align =center > 行程里程 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 120pt"  align =center > 总油耗 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 40pt"  align =center > 加油费 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 140pt"  align =center > 维修费 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 122pt"  align =center > 养路费 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 180pt"  align =center > 过路/桥费 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 54pt"  align =center > 洗车费 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 54pt"  align =center > 停车费 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 54pt"  align =center > 年检费 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 54pt"  align =center > 保险费 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 59pt"  align =center > 其它费用 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 40pt"  align =center > 总费用 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 150pt"  align =center > 出车次数 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 59pt"  align =center > 运营费用 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 59pt"  align =center > 事故次数 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 143pt"  align =center > 利用天数 </ TD >                                            < td  class ="report_column"  style ="WIDTH: 80pt"  align =center > 利用率 </ TD >                              </ TR >                                          <%                                    }                            else                                   { %>                              < TR > <%                                    } %>                                     < TD  height ="5"  width ="165" > <% # DataBinder.Eval(Container.DataItem, "Department.Name" %> </ TD >                                     < TD  height ="5"  style ='WIDTH:193pt' > <% # DataBinder.Eval(Container.DataItem, "Number" %> </ TD >                                     < TD  style ='WIDTH:179pt' > <% # DataBinder.Eval(Container.DataItem, "Type.TypeName" %> </ TD >                                     < TD  style ='WIDTH:188pt' > <% # DataBinder.Eval(Container.DataItem, "MilesRange" %> </ TD >                                     < TD  style ='WIDTH:120pt' > <% # DataBinder.Eval(Container.DataItem, "OilCountSum" %> </ TD >                                     < TD  style ='WIDTH:40pt' > <% # DataBinder.Eval(Container.DataItem, "GasCostSum" %> </ TD >                                     < TD  style ='WIDTH:140pt' > <% # DataBinder.Eval(Container.DataItem, "MaintainCostSum" %> </ TD >                                     < TD  style ='WIDTH:122pt' > <% # DataBinder.Eval(Container.DataItem, "MaitainRoadAndBridgeSum" %> </ TD >                                     < TD  style ='WIDTH:180pt' > <% # DataBinder.Eval(Container.DataItem, "RoadAndBridgeTollSum") %> </ TD >                                     < TD  style ='WIDTH:54pt' > <% # DataBinder.Eval(Container.DataItem, "WashCarCostSum") %> </ TD >                                     < TD  style ='WIDTH:54pt' > <% # DataBinder.Eval(Container.DataItem, "ParkCarCostSum") %> </ TD >                                     < TD  style ='WIDTH:54pt' > <% # DataBinder.Eval(Container.DataItem, "YearCheckCostSum") %> </ TD >                                     < TD  style ='WIDTH:54pt' > <% # DataBinder.Eval(Container.DataItem, "InsuranceCostSum") %> </ TD >                                     < TD  style ='WIDTH:59pt' > <% # DataBinder.Eval(Container.DataItem, "ElseCostSum") %> </ TD >                                     < TD  style ='WIDTH:40pt' > <% # DataBinder.Eval(Container.DataItem, "CostSum") %> </ TD >                                     < TD  style ='WIDTH:150pt' >                                            <% # DataBinder.Eval(Container.DataItem, "AssignmentCount") %>                                     </ TD >                                     < TD  style ='WIDTH:59pt' >                                            <% # DataBinder.Eval(Container.DataItem, "RunCost") %>                                     </ TD >                                     < TD  style ='WIDTH:59pt' > <% # DataBinder.Eval(Container.DataItem, "AccidentCounts") %> </ TD >                                     < TD  style ='WIDTH:143pt' >                                            <% # DataBinder.Eval(Container.DataItem, "AssignmentDays") %>                                     </ TD >                                     < TD  style ='WIDTH:80pt' >                                            <% # DataBinder.Eval(Container.DataItem, "AssignmentDaysRate") %>                                     </ TD >                              </ TR >                       </ ItemTemplate >                </ asp:repeater >         </ TABLE > 到此,打印全部结速!简单的打印的功能几乎可以满足了,对于那种说用户自定义打印记录数等等,那个方法还得完善。示例图如下:  

    最新回复(0)