Java軟件報表軟件技術(shù)博客

          java報表軟件技術(shù)匯總 java報表軟件制作 報表軟件新聞
          posts - 355, comments - 100, trackbacks - 0, articles - 3
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          本文以填報報表為例,通過分頁的方式,來解決大數(shù)據(jù)集展示的問題。

          實現(xiàn)的思想就是通過在SQL里篩選部分數(shù)據(jù)庫數(shù)據(jù),以達到瀏覽器可以合理的展示報表頁面。(數(shù)據(jù)分段,語句我這采用的是MYSQL,如果要用其他數(shù)據(jù)庫,請查看FineReport幫助文檔)

          步驟一:打開fenye.cpt文件。

          模板界面如下

           

          兩個ds,和一部分數(shù)據(jù),及隱藏的一行。

           

          隱藏一行內(nèi)容如下

           

          這里數(shù)據(jù)的功能會在下面說起。

           

          ds1 里的內(nèi)容如下

          語句內(nèi)容 SELECT * from aaa limit ${f},${p}

          目的是從第${f}跳開始,選擇${p}數(shù)據(jù)(這個$p就是展示的頁數(shù),$f的計算可以下面公式($page-1)*$p,mysql的limit的偏移量是從0開始)。

           

          在模板參數(shù)里,我設(shè)置了他們的默認值

           

          $P=20

          $page=1;

          這個和全局參數(shù)同理,在模板預(yù)覽的時候是看不到數(shù)據(jù)的,必須到展示頁面的時候參數(shù)才通過url傳進來。

           

          ds2里的內(nèi)容如下

           

          這個語句就比較簡單就是求數(shù)據(jù)總數(shù)再除以每頁頁數(shù),就能得到總頁數(shù)。

           

          報表主體

           

          第一行的數(shù)據(jù)分別是前一頁,后一頁,總頁數(shù)和當(dāng)前頁以及一個/,用來在工具欄里展示上一頁和下一頁等操作使用的,這里正常是不顯示的,所以我們先屏蔽了(隱藏)。其他的就是用戶數(shù)據(jù)的展示了。

           

          為了展示報表能和我們正常報表一樣,我們還需要做什么?

           

          這里就需要寫代碼能實現(xiàn)上圖的效果了。

           

          點開填報預(yù)覽的齒輪

           

          可以看到我們這里用了7個自定義按鈕和一個加載結(jié)束事件

          加載結(jié)束事件的代碼如下:

          var toolbar = contentPane.toolbar;

          var items = toolbar.options.items;

          var customButton=items[2];//JQUERY取我們的工具欄上的按鈕.items[2]代表的是第三個,也就是那個顯示成文本框按鈕。

          var inner = customButton.$table;

          var btnWrapper = $("em", inner);

          btnWrapper.html("<input data-role='none' type='text'  class='fr-texteditor' style='width: 42px; height: 16px; text-align: center;'>");

          //修正這個按鈕的屬性,讓它變成文本類型,居中,鼠標放上次圖標是編輯狀態(tài)。

          var cellValue = contentPane.curLGP.getCellValue("D1");//獲取D1單元格的值就是page,也就是當(dāng)前頁。

          var $input = $("input", btnWrapper);

          $input.val(cellValue);//給這個文本控件復(fù)制,用的是JQUERY的方法,可以COPY。

          var total=contentPane.curLGP.getCellValue("C1");

          if (total>parseInt(total)){total=parseInt(total)+1;

          }

          contentPane.toolbar.options.items[4].setText(total);

          //把總頁數(shù)顯示在第5個控件上,因為這個數(shù)值可能是小數(shù),所以判斷下要不要加一處理。

          contentPane.toolbar.options.items[3].setText(contentPane.curLGP.getCellValue("E1"));

          //把斜線寫在第4個控件上。

          7個自定義按鈕:

          第一個首頁:

          代碼如下:

          window.location.href="${servletURL}?reportlet=fenye.cpt&op=write&page=1";//鏈接到fenye.cpt,page 參數(shù)=1,代表第一頁。

          第二個上一頁:

          代碼如下:

          var page= $("tr[tridx=0]","div.content-container").children().eq(0).html();  //取第一行第一個單元格內(nèi)容。

          if(page==0)

          {

          this.setEnable(false);

          alert("頁面超出指定的范圍");

          }

          else

          window.location.href="${servletURL}?reportlet=fenye.cpt&op=write&page="+page//如果沒有小于1就正常跳轉(zhuǎn),否則顯示頁面超過指定的范圍,這個控件設(shè)置不可以使用。

          第三個可以跳轉(zhuǎn)的當(dāng)前頁:

            var toolbar = contentPane.toolbar;

                  var items = toolbar.options.items;

                  var customButton=items[2];

                  var inner = customButton.$table;

                  var btnWrapper = $("em", inner);

          var $input = $("input", btnWrapper);

          //取這個控件

          $input.blur(function(){

            var toolbar = contentPane.toolbar;

                  var items = toolbar.options.items;

                  var customButton=items[2];

                  var inner = customButton.$table;

                  var btnWrapper = $("em", inner);

          var $input = $("input", btnWrapper);

          var page=$input.val();

          var total=$("tr[tridx=0]","div.content-container").children().eq(2).html(); 

          if (total>parseInt(total)){total=parseInt(total)+1;

          }

          if(parseInt(page) > parseInt(total) || parseInt(page) < parseInt(1) )

          {

          alert("你輸出的頁數(shù)不再指定范圍內(nèi)");

          }

          else

          window.location.href="${servletURL}?reportlet=fenye.cpt&op=write&page="+page

          });

          //失去焦點后輸入的值是不是在指定的范圍內(nèi),如果在跳轉(zhuǎn)到指定頁面,就在else后面的URL,否則輸出你的輸出頁面不對提示。失去焦點代表就是點擊其他地方或者點擊TAB鍵。

           

          第四個斜線:
          這個在加載時間里處理了。這邊不需要處理。
          第五個總頁數(shù):
          這個在加載時間里處理了。這邊不需要處理。
          第六個下一頁:
          var page= $("tr[tridx=0]","div.content-container").children().eq(1).html();  
          var total=$("tr[tridx=0]","div.content-container").children().eq(2).html(); 
          //JQURUY取下一頁和總頁數(shù)
                if (total>parseInt(total)){total=parseInt(total)+1;
               }
          //判斷總頁數(shù)是不是整數(shù),不是加一
                if(parseInt(page) > parseInt(total))
            {
          this.setEnable(false);
          alert("頁數(shù)超出指定范圍內(nèi)");
          }
          else
          window.location.href="${servletURL}?reportlet=fenye.cpt&op=write&page="+page
          //如果下一頁在這個范圍就跳轉(zhuǎn)到那里


          這個控件不可用,輸出出錯。
          第七個末頁:
          代碼如下:
          var total=$("tr[tridx=0]","div.content-container").children().eq(2).html();  
          //取總頁數(shù)。
          if (total>parseInt(total)){total=parseInt(total)+1;
          }
          window.location.href="${servletURL}?reportlet=fenye.cpt&op=write&page="+total
          //判斷總頁數(shù)是不是整數(shù),不是加一,并跳轉(zhuǎn)到最后一頁。
          顯示控件的名稱需要在別名里添加下



          主站蜘蛛池模板: 安阳县| 利辛县| 合江县| 赤峰市| 海林市| 原平市| 天门市| 宜兰市| 胶南市| 湘潭县| 卢龙县| 开原市| 龙口市| 保靖县| 永州市| 南丹县| 芦山县| 贺兰县| 大化| 博乐市| 彰化县| 郸城县| 黑河市| 宾川县| 贵阳市| 黑龙江省| 珠海市| 宁武县| 丽江市| 新建县| 清镇市| 张家港市| 兴隆县| 梁平县| 石河子市| 乐陵市| 浦北县| 陇南市| 镇巴县| 中阳县| 唐山市|