1. 程式人生 > >EasyUI資料分頁實現(真假分頁)

EasyUI資料分頁實現(真假分頁)

          資料分頁功能的實現是在任何一個專案中都非常實用的一個功能,在ASP.NET學習的時候,曾寫過一篇關於分頁功能的實現(點選檢視),上面已經介紹的真假分頁的優缺點,在這裡我們就不過多的贅述了。現在的分頁實現依賴於EasyUI前臺框架的強大功能,那麼接下來就讓我們看看資料分頁在Easyui中的實現吧!

      分頁往往是依附於資料表格的,所以我們就使用的是easyui的datagrid元件,來開啟pagination分頁元件,為了方便,我們使用JS實現。

       表格顯示初始化

<table id="dg"></table>
<script>
    $('#dg').datagrid({
        title: '學生資訊查詢結果',       //表格標題
        width:500,            //表格寬度
        pagination: true,     //開啟分頁
        pageSize: 10,         //分頁大小
        pageNumber:1,         //第幾頁顯示(預設第一頁,可以省略)
        pageList: [10, 20, 30], //設定每頁記錄條數的列表 
        //url: '/FreshStudentMaintain/test',  //獲取資料地址
        columns: [[                //新增列
            {
                field: 'OrganizationID',  //繫結資料來源ID
                title: '專業程式碼',        //顯示列名稱
            },
            {
                field: 'OrganizationName',
                title: '專業名稱',
            },
        ]],
    });
</script>
我們還可以手動設定分頁控制元件的顯示樣式,例如:
    var p = $('#dg').datagrid('getPager');
    $(p).pagination({
        beforePageText: '第',//頁數文字框前顯示的漢字 
        afterPageText: '頁    共 {pages} 頁',
        displayMsg: '第{from}到{to}條,共{total}條',
    });

原版顯示效果如下:      
如上圖所示,資料表格和分頁已經顯示出來了。

       假分頁實現

假分頁就是將所有要顯示的資料全部查詢出來後,進行前臺的分頁,適合資料量較小的Web專案。
實現程式碼:
<script>       
    $('#dg').datagrid({ loadFilter: pagerFilter }).datagrid({
            url: '/FreshStudentMaintain/test'     //載入資料
        });

// 分頁資料的操作
    function pagerFilter(data) {
        if (typeof data.length == 'number' && typeof data.splice == 'function') {	// is array
            data = {
                total: data.length,
                rows: data
            }
        }
        var dg = $(this);
        var opts = dg.datagrid('options');
        var pager = dg.datagrid('getPager');
        pager.pagination({
            onSelectPage: function (pageNum, pageSize) {
                opts.pageNumber = pageNum;
                opts.pageSize = pageSize;
                pager.pagination('refresh', {
                    pageNumber: pageNum,
                    pageSize: pageSize
                });
                dg.datagrid('loadData', data);
            }
        });
        if (!data.originalRows) {
            data.originalRows = (data.rows);
        }
        var start = (opts.pageNumber - 1) * parseInt(opts.pageSize);
        var end = start + parseInt(opts.pageSize);
        data.rows = (data.originalRows.slice(start, end));
        return data;
    }
</script>

後臺程式碼僅僅是將從資料庫裡查詢到的資料轉化未Json字串型別傳到前臺就可以了。例:
public ActionResult test()
        {
            IBasicOrganizationBll CollegeBll = SpringHelper.GetObject<IBasicOrganizationBll>("BasicOrganizationBll");
            List<OrganizationViewModel> college = CollegeBll.QueryCollege();//查詢後臺資料方法

            return Json(college, JsonRequestBehavior.AllowGet);

        }

顯示效果:

       真分頁

真分頁相對假分頁來說麻煩了一些,但是對於資料量大的系統來說,可以很好的,快速的查詢資料。要想實現分頁,我們就得先知道分頁的原理,首先我們需要將[第幾頁](pageIndex)和[一頁多少資料](pageSize)傳遞給後臺,以便查詢,EasyUI非常方便的給我們提供了自動將這兩個引數傳到後臺的事件,當我們剛開始載入資料的時候,我們可以看到如圖,
當我選擇每頁顯示10條資料的時候。 當我點選下一頁的時候, 是不是非常清楚原理了,我們現在要做的就是在後臺接收這些資料,當然需要注意的是:後臺需要返回總資料條數(total)以便前臺顯示。
<script>
    $('#dg').datagrid({
        title: '學生資訊查詢結果',       //表格標題
        width:500,            //表格寬度
        pagination: true,     //開啟分頁
        pageSize: 10,         //分頁大小
        pageNumber:1,         //第幾頁顯示(預設第一頁,可以省略)
        pageList: [10, 20, 30], //設定每頁記錄條數的列表 
        url: '/FreshStudentMaintain/test',  //獲取資料地址
        columns: [[                //新增列
            {
                field: 'OrganizationID',  //繫結資料來源ID
                title: '專業程式碼',        //顯示列名稱
            },
            {
                field: 'OrganizationName',
                title: '專業名稱',
            },
        ]],
    });
</script>
後臺程式碼接收:
        public ActionResult test()
        {
            int pageIndex, pageSize;
            pageIndex = int.Parse(Request["page"]);     //第幾頁的資料
            pageSize = int.Parse(Request["rows"]);  //每頁多少條資料
            int total=0;         //返回資料條數總值

            IBasicOrganizationBll CollegeBll = SpringHelper.GetObject<IBasicOrganizationBll>("BasicOrganizationBll");
            List<OrganizationViewModel> major = CollegeBll.test(pageIndex,pageSize,out total);

            var data = new
            {
                total,      //將資料total載入到data中,返回到前臺。
                rows = major
            };
            return Json(data, JsonRequestBehavior.AllowGet);

        }

介面程式碼:
List<OrganizationViewModel> test(int pageIndex, int pageSize, out int total);
查資料程式碼(我這裡使用的封裝好的D層,僅供參考,具體查詢方法,請自己書寫SQL語句):
public List<OrganizationViewModel> test(int pageIndex, int pageSize,out int total)
         {
             List<basicorganizationentities> major = new List<basicorganizationentities>();

             major = this.BasicOrganizationCurrentDal.LoadPageItems(pageSize, pageIndex, out total, u => u.OrganizationCode, true).ToList();  //分頁資料查詢

             return ConvertListToList<List<basicorganizationentities>, List<OrganizationViewModel>>.ListInputToOutput<basicorganizationentities, OrganizationViewModel>(major); //返回查詢到的泛型集合。
         }

至此真分頁就已經實現了(其實也沒什麼東西,但是剛開始接觸,不怎麼會用而已)。

       MySQL分頁查詢語句(轉載自原文地址

方法1:直接使用資料庫提供的SQL語句

---語句樣式: MySQL,可用如下方法:SELECT * FROM 表名稱 LIMIT M,N

---適應場景:適用於資料量較少的情況(元組百/千級)

---原因/缺點:全表掃描,速度會很慢有的資料庫結果集返回不穩定(如某次返回1,2,3,另外的一次返回2,1,3)Limit限制的是從結果集的M位置處取出N條輸出,其餘拋棄。

方法2:建立主鍵或唯一索引,利用索引(假設每頁10)

---語句樣式: MySQL,可用如下方法

SELECT *FROM 表名稱 WHERE id_pk > (pageNum*10)LIMIT M

---適應場景適用於資料量多的情況(元組數上萬)

---原因:索引掃描,速度會很快。有朋友提出因為資料查詢出來並不是按照pk_id排序的,所以會有漏掉資料的情況,只能方法3

方法3:基於索引再排序

---語句樣式: MySQL,可用如下方法:SELECT * FROM 表名稱 WHERE id_pk >(pageNum*10) ORDER BY id_pk ASC LIMIT M

---適應場景適用於資料量多的情況(元組數上萬).最好ORDER  BY後的列物件是主鍵或唯一所以,使得ORDERBY操作能利用索引被消除但結果集是穩定的(穩定的含義,參見方法1)

---原因:索引掃描,速度會很快MySQL的排序操作,只有ASC沒有DESC(DESC是假的,未來會做真正的DESC,期待)

方法4: 基於索引使用prepare(第一個問號表示pageNum,第二個?表示每頁元組數)

---語句樣式: MySQL,可用如下方法

PREPAREstmt_name FROM SELECT * FROM 表名稱 WHEREid_pk > (*) ORDER BY id_pk 

ASC LIMIT M

---適應場景:大資料量。

---原因:索引掃描,速度會很快. prepare語句又比一般的查詢語句快一點。

方法5:利用MySQL支援ORDER操作可以利用索引快速定位部分元組,避免全表掃描

---比如:讀第10001019行元組(pk是主鍵/唯一鍵)

---SELECT *FROM your_table WHERE pk>=1000 ORDER BY pk ASC LIMIT 0,20

方法6:利用"子查詢/連線+索引"快速定位元組的位置,然後再讀取元組.道理同方法5

---(id是主鍵/唯一鍵,藍色字型時變數):

利用子查詢示例:

1

2

3

4

SELECT *FROM your_tableWHERE id <=

(SELECT idFROM your_tableORDER

BY iddesc LIMIT ($page-1)*$pagesizeORDER BY iddesc

LIMIT $pagesize

利用連線示例:

1

2

3

4

5

SELECT *FROM your_tableAS t1

JOIN (SELECT idFROM your_tableORDER BY

id desc LIMIT ($page-1)*$pagesize AS t2

WHERE

t1.id <= t2.id ORDER BY t1.iddesc LIMIT $pagesize;


總結:資料分頁原理都是一樣的,不論使用什麼前臺框架,都是這樣使用,也就是屬性和方法變一變而已,熟悉一下就會使用了,而對與十萬、百萬級別以上的資料的效能優化,就是能靠SQL查詢語句的優化了,需要記住的是使用主鍵和索引是一條非常好的辦法。

相關推薦

EasyUI資料實現(真假)

          資料分頁功能的實現是在任何一個專案中都非常實用的一個功能,在ASP.NET學習的時候,曾寫過一篇關於分頁功能的實現(點選檢視),上面已經介紹的真假分頁的優缺點,在這裡我們就不過多的

EasyUI結合Sqlserver資料庫實現一個顯示資料

EasyUI大多數會被用在做後臺的美化,以及資料的展示。今天是六一兒童節,祝各位程式設計師們,兒童節快樂哈!話不多說,我們開始正題。先來看看我們這個小案例的專案目錄:App_Data中的四個檔案是博主為了方便檢視專案把他放在一起。步驟一:我們編寫了資料庫指令碼.sql檔案,在

Asp.Net北大青鳥總結(四)-使用GridView實現真假

void 每次 第三方控件 ati exec open() lld ret ges 這段時間看完了asp.net視頻。可是感覺到自己的學習好像沒有鞏固好,於是又在圖書館裏借了幾本關於asp.net的書感覺真的非常好自己大概對於asp.net可以實現主要的小D

織夢欄目實現前十後十

欄目分頁前十頁後十頁 實現教程 開啟 /include/arc.listview.class.php 找到 $prepage.="<li><a href='".$purl."PageNo=$prepagenum'>上一頁</a></li>\r\n";

SpringBoot+Easyui+pagehelper實現功能

1.首先引入jar包 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <ve

【牛腩】 網站真假徹底實現

前言: 原本以為今天就要釋出系統成功了,但是在牛腩的最後一集,出來了一個重要的知識點,那就是真假分頁,如果有感興趣的朋友,或者還不是很明白真假分頁的朋友們,可一定要看接下來的內容!因為這裡有正解! 1、問題引入 如圖下所示,當我們在瀏覽新聞時,由於新聞數量非常的多我們必須要進

easyui資料基礎版(第一版)

1.效果圖 這是最基礎版本,比較簡單,首先下載一套easy放到專案中,然後看我的頁面引入的什麼你就引入什麼 頁面資料: <!DOCTYPE html> <html lang="en"> <head> <meta ch

easyui資料基礎版(第二版)

1.效果圖 這是最第二個版本,比第一個多一個模糊查詢,這也是企業開發中常用的,首先下載一套easy放到專案中,然後看我的頁面引入的什麼你就引入什麼 頁面資料: <!DOCTYPE html> <html lang="en"> <head

easyui表格屬性以及實現例子

一、表格常用配置如下:以OPC專案中的分頁為例$('#dg').datagrid({ //title:'選單列表', //標題 method : 'post', iconCls : 'icon-edit', //圖示

ASP.NET+Ajax+JQuey+Json資料+儲存過程實現無重新整理

<!--引入jquery-1.6.2--> <!--ShowPageData1.aspx頁面--> <script src="../Jquery/jquery-1.6.2.min.js" type="text/javascript">&l

easyui中的實現(支援MySQL,SQLServer,Oracle)

package com.dxwind.common.bean; import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLExcept

【牛腩釋出系統】—真假實現

前言 牛腩的最後一集講了真假分頁,因為資料多的時候一頁全是資料,給使用者的體驗很不好,資料太多顯示在一起瀏覽器也會出錯,這時候就用到分頁了,分頁的方式有多種,下面主要是用控制元件實現分頁,分頁又分為了真分頁和假分頁,那麼這兩者的區別時什麼呢? 什麼是真假分頁 真分頁:

SSM框架實現,返回的JSON資料

先看一下返回的JSON資料: { "pagNum": 1, "pageSize": 5, "totalRecord": 12, "totalPage": 3,

jquery easyui datagrid 實現---善良公社專案

    接著上篇文章,接下來給大家分享分頁的實現,分頁其實多多少少見過很有幾種,框架中帶的圖片都特別的好看,會給使用者以好的使用效果,具體實現,需要自己來補充程式碼; 圖示1:     通常情況下

資料學習[16]--使用scroll實現Elasticsearch資料遍歷和深度[轉]

題目:使用scroll實現Elasticsearch資料遍歷和深度分頁 作者:星爺 出處: http://lxWei.github.io/posts/%E4%BD%BF%E7%94%A8scroll%E5%AE%9E%E7%8E%B0Elasticsearch%E6%95%B0%E6%8

AspNetPager真假對照實例

select water response sso 真假 esc sta abi 夠快 從開始學習BS已經有一段時間了。對於BS的設計,都是進行的網頁設計,當中包含從數據庫中取出來的數據。顯示在頁面上。曾經在CS中,都是使用GridView等表格控件進行顯示,因

Spring實現PageImpl<T>類

sea equals public ini ack format contain link 部分 Spring框架中PageImpl<T>類的源碼如下: /* * Copyright 2008-2013 the original author or aut

java之真假

分頁 真假 .com 至少 ref lec from kdt baidu 真分頁(要的是什麽範圍的記錄在數據庫查的時候就只查這幾條記錄):select s.* from (select *,row_number() over(order by SLoginId) as ro

symfony實現方法

ont param creat com render 實現 使用 ext urn 1.symfony分頁是要用到組件的,所以這裏使用KnpPaginatorBundle實現翻頁 2. 用composer下載 在命令行中: composer require "

SpringData JPA實現CRUD,與多參數排序

method clas asc spring from pda des home 參數   Spring Data 項目的目的是為了簡化構建基於 Spring 框架應用的數據訪問計數,包括非關系數據庫、Map-Reduce 框架、雲數據服務等等,SpringData JPA