extjs Grid (二)

        很多时候我们表格里显示的数据是从后台查询出来的海量数据,那么海量的数据显示在表格里用户的体验肯定会很差,效率也会很低。ExtJS为了解决这个问题,就给我们提供了一个非常强大的分页组件。今天我们就研究一下ExtJS的分页技术。

1、为表格添加分页组件

     要为表格添加分页组件,就要先创建Ext.PagingToolbar类的实例对象,然后将它添加到Panel中去。

[c-sharp]  view plain copy
  1. gridPanel = new Ext.grid.GridPanel({  
  2.       autoHeight: true,  
  3.       renderTo: 'grid',   
  4.       store: store,       
  5.       cm: cm,   
  6.       sm:mm,  
  7.       bbar:new Ext.PagingToolbar({  
  8.       pageSize:3,  
  9.       store:store,  
  10.       displayInfo:true,  
  11.       displayMsg:'显示记录 {0} - {1} of {2}',  
  12.       emptyMsg:"没有记录"  
  13.       })  
  14.  });   

PagingToolbar类的属性描述:

    pageSize:每页显示的记录条数。

    displayInfo:是否显示记录信息。

    displayMsg:该属性值为true时,该属性才有效。{0}:表示当前显示的记录起始数。{1}:表示显示记录数的结尾数。{2}:表示总共多少记录。

    emptyMsg:当没有记录的时候显示的文本信息。

 

2、从服务器端获得分页数据

       如果使用静态数据,Grid每次都会将所有数据显示。所以这里我们就编写一个Servlet来生成动态数据生成Grid。Servlet将接受两个请求数据start和limit。Start表示当前页显示记录的起始位置,limit表示每页显示的记录数。

[javascript]  view plain copy
  1. public class GridServlet extends HttpServlet {  
  2.  private static final long serialVersionUID = 1L;      
  3.  protected void service(HttpServletRequest request, HttpServletResponse response)  
  4.    throws ServletException, IOException {  
  5.   response.setContentType("text/html;charset=gbk");  
  6.   PrintWriter out = response.getWriter();  
  7.   String start = request.getParameter("start");  
  8.   String limit = request.getParameter("limit");  
  9.   int index = Integer.parseInt(start);  
  10.   int pageSize = Integer.parseInt(limit);  
  11.   int total = 100000;  
  12.   String jsonStr = "{total:" + total + ",root:[";  
  13.   for (int i = index; i < pageSize + index; i++)  
  14.   {  
  15.    int productIndex = i + 1;  
  16.    jsonStr += "{product_id:" + productIndex + ",product_name:'产品"  
  17.      + productIndex + "',product_price:'价格" + productIndex  
  18.      + "'}";  
  19.    if (i != pageSize + index - 1)  
  20.     jsonStr += ",";  
  21.   }  
  22.   jsonStr += "]}";  
  23.   out.println(jsonStr);  
  24.  }  
  25. }  

      要通过服务器来接收数据生成表格,就必须使用HttpProxy来制定URL。还有,服务器传递过来的数据是Json格式的,就不能使用ArrayReader了,需要使用的是JsonReader。

[javascript]  view plain copy
  1. Ext.onReady(function(){  
  2.  var mm = new Ext.grid.CheckboxSelectionModel();  
  3.     var cm = new Ext.grid.ColumnModel([  
  4.         new Ext.grid.RowNumberer(),  
  5.         mm,  
  6.         {header:'产品编号',dataIndex:'product_id'},  
  7.         {header:'产品名称',dataIndex:'product_name'},  
  8.         {header:'产品价格',dataIndex:'product_price'}  
  9.     ]);    
  10.  var store = new Ext.data.Store({  
  11.         proxy: new Ext.data.HttpProxy({url:'../GridServlet'}),  
  12.         reader: new Ext.data.JsonReader({  
  13.          totalProperty:'total',  
  14.          root:'root'  
  15.         },[  
  16.            {name:'product_id'},  
  17.            {name:'product_name'},  
  18.            {name:'product_price'}  
  19.         ])   
  20.     });  
  21. store.load({params:{start:0,limit:10}});  
  22.     var gridPanel = new Ext.grid.GridPanel({  
  23.         autoHeight: true,  
  24.         renderTo: 'grid',          
  25.         store: store,  
  26.         cm: cm,  
  27.         sm:mm,  
  28.         bbar:new Ext.PagingToolbar({  
  29.          pageSize:10,  
  30.          store:store,  
  31.          displayInfo:true,  
  32.          displayMsg:'显示记录 {0} - {1} of {2}',  
  33.          emptyMsg:"没有记录"  
  34.         })  
  35.     });   
  36. });  

      这样一个简单的ExtJS Grid分页就实现了。


你可能感兴趣的:(ext,grid)