1. 程式人生 > >ExtJS4學習筆記(七)---帶搜尋的Grid(SearchGrid)

ExtJS4學習筆記(七)---帶搜尋的Grid(SearchGrid)

專案開發中,Grid元件少不了搜尋功能,在Extjs4中,搜尋元件以外掛的形式出現,而且實現也非常簡單,搜尋元件位於examples/ux/form目錄下,JS檔案是SearchField.js。

Grid載入搜尋功能,要注意的是:

1、開啟延遲載入,即Ext.Loader.setConfig({enabled: true});

2、設定外掛的目錄:Ext.Loader.setPath('Ext.ux', '../../examples/ux'); ,需要注意,外掛所在目錄一定要正確,否則載入失敗,就實現不了所要功能了。

效果圖:


初始載入


輸入查詢條件後

HTML程式碼:

  1. <!DOCTYPE html PUBLIC 
    "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>SearchGrid-MHZG.NET</title>
  6. <link rel="stylesheet" type="text/css"
     href="../../resources/css/ext-all.css" />
  7. <style type="text/css">
  8.         #search-results a {
  9.             color: #385F95;
  10.             font:bold 11px tahoma, arial, helvetica, sans-serif;
  11.             text-decoration:none;
  12.         }
  13.         #search-results a:hover {
  14.             text-decoration:underline;
  15.         }
  16.         #search-results p {
  17.             margin:3px !important;
  18.         }
  19.         .search-item {
  20.             font:normal 11px tahoma, arial, helvetica, sans-serif;
  21.             padding:3px 10px 3px 10px;
  22.             border:1px solid #fff;
  23.             border-bottom:1px solid #eeeeee;
  24.             white-space:normal;
  25.             color:#555;
  26.         }
  27.         .search-item h3 {
  28.             display:block;
  29.             font:inherit;
  30.             font-weight:bold;
  31.             color:#222;
  32.         }
  33.         .search-item h3 span {
  34.             float: right;
  35.             font-weight:normal;
  36.             margin:0 0 5px 5px;
  37.             width:100px;
  38.             display:block;
  39.             clear:none;
  40.         }
  41.         /*這裡要注意這兩張圖片的路徑要正確*/
  42.         .x-form-clear-trigger {
  43.             background-image: url(../../resources/themes/images/default/form/clear-trigger.gif);
  44.         }
  45.         .x-form-search-trigger {
  46.             background-image: url(../../resources/themes/images/default/form/search-trigger.gif);
  47.         }
  48.     </style>
  49. <script type="text/javascript" src="../../bootstrap.js"></script>
  50. <script type="text/javascript" src="../../locale/ext-lang-zh_CN.js"></script>
  51. <script type="text/javascript" src="searchgrid.js"></script>
  52. </head>
  53. <body>
  54. <div id="demo"></div>
  55. </body>
  56. </html>

SearchGrid.js:

  1. Ext.Loader.setConfig({enabled: true});
  2. Ext.Loader.setPath('Ext.ux''../../examples/ux');
  3. Ext.require([
  4. 'Ext.grid.*',
  5. 'Ext.toolbar.Paging',
  6. 'Ext.util.*',
  7. 'Ext.data.*',
  8. 'Ext.ux.form.SearchField'
  9. ]);
  10. Ext.onReady(function(){
  11.     Ext.define('MyData',{
  12.         extend: 'Ext.data.Model',
  13.         fields: [
  14. 'title','author',
  15. //第一個欄位需要指定mapping,其他欄位,可以省略掉。
  16.             {name:'hits',type: 'int'},
  17. 'addtime'
  18.         ]
  19.     });
  20. //建立資料來源
  21. var store = Ext.create('Ext.data.Store', {
  22. //分頁大小
  23.         pageSize: 50,
  24.         model: 'MyData',
  25. //是否在服務端排序
  26.         remoteSort: true,
  27.         proxy: {
  28. //非同步獲取資料,這裡的URL可以改為任何動態頁面,只要返回JSON資料即可
  29.             type: 'ajax',
  30.             url: 'searchgrid.asp',
  31.             reader: {
  32.                 root: 'items',
  33.                 totalProperty  : 'total'
  34.             },
  35.             simpleSortMode: true
  36.         },
  37.         sorters: [{
  38. //排序欄位。
  39.             property: 'hits',
  40. //排序型別,預設為 ASC
  41.             direction: 'DESC'
  42.         }]
  43.     });
  44. //建立Grid
  45. var grid = Ext.create('Ext.grid.Panel',{
  46.         store: store,
  47.         columnLines: true,
  48.         columns: [
  49.                 {text: "標題", width: 120, dataIndex: 'title', sortable: true},
  50.                 {text: "作者", width: 140, dataIndex: 'author', sortable: false},
  51.                 {text: "點選數", width: 100, dataIndex: 'hits', sortable: true},
  52.             {text: "新增時間", width: 150, dataIndex: 'addtime', sortable: true}
  53.         ],
  54.         height:400,
  55.         width:520,
  56.         x:20,
  57.         y:40,
  58.         title: 'ExtJS4 SearchGrid-Grid 搜尋',
  59.         disableSelection: true,
  60.         loadMask: true,
  61.         renderTo: 'demo',
  62.         viewConfig: {
  63.             id: 'gv',
  64.             trackOver: false,
  65.             stripeRows: false
  66.         },
  67.         dockedItems: [{
  68.             dock: 'top',
  69.             xtype: 'toolbar',
  70.             items: {
  71.                 width: 300,
  72.                 fieldLabel: '搜尋',
  73.                 labelWidth: 50,
  74.                 xtype: 'searchfield',
  75.                 store: store
  76.             }
  77.         }, {
  78.             dock: 'bottom',
  79.             xtype: 'pagingtoolbar',
  80.             store: store,
  81.             pageSize: 25,
  82.             displayInfo: true,
  83.             displayMsg: '顯示 {0} - {1} 條,共計 {2} 條',
  84.             emptyMsg: '沒有資料'
  85.         }]
  86.     })
  87.     store.loadPage(1);
  88. })

程式碼完成了Grid元件非同步載入資訊、分頁和搜尋功能,可以滿足一般使用情況了。

服務端程式碼,由於使用測試資料,這裡只使用了最簡單的方法來實現搜尋效果,實際操作中,需要將查詢條件置於SQL語句中,達到搜尋效果。

SearchGrid.asp:

  1. <%
  2.     Response.ContentType = "text/html"
  3.     Response.Charset = "UTF-8"
  4. %>
  5. <%
  6. '返回JSON資料,自定義一些測試資料。。
  7. '這裡的引數與EXT3.x相同,區別在於排序欄位和排序方式使用了新的屬性。
  8. '由於這裡是測試資料,接收的引數只用到了start,limit。sorts和dir在實際操作過程中,將之加入SQL的ORDER BY裡即可。
  9. start = Request("start")
  10. limit = Request("limit")
  11. '查詢時獲取的引數。
  12. query = Request("query")
  13. If start = ""Then
  14.     start = 0
  15. EndIf
  16. If limit = ""Then
  17.     limit = 50
  18. EndIf
  19. sorts = Replace(Trim(Request.Form("sort")),"'",""
  20. dir = Replace(Trim(Request.Form("dir")),"'","")
  21. '測試資料,這裡直接輸出結果,實際應用中,應該把查詢條件放到SQL語句中。
  22. If query = "newstitle"Then
  23.     Echo("{")
  24.     Echo("""total"":")
  25.     Echo("""1")
  26.     Echo(""",""items"":[")
  27.     Echo("{")
  28.     Echo("""title"":""newstitle""")
  29.     Echo(",")
  30.     Echo("""author"":""author""")
  31.     Echo(",")
  32.     Echo("""hits"":""100""")
  33.     Echo(",")
  34.     Echo("""addtime"":"""&Now()&"""")
  35.     Echo("}")
  36.     Echo("]}")
  37. Else
  38. Dim counts:counts=300
  39. '注意,這裡的counts相當於Rs.RecordCount,也就是記錄總數。
  40. Dim Ls:Ls = Cint(start) + Cint(limit)
  41. If Ls >= counts Then
  42.    Ls = counts
  43. EndIf
  44. Echo("{")
  45. Echo("""total"":")
  46. Echo(""""&counts&""",")
  47. Echo("""items"":[")
  48. For i = start+1 To Ls
  49.    Echo("{")
  50.    Echo("""title"":""newstitle"&i&"""")
  51.    Echo(",")
  52.    Echo("""author"":""author"&i&"""")
  53.    Echo(",")
  54.    Echo("""hits"":"""&i&"""")
  55.    Echo(",")
  56.    Echo("""addtime"":"""&Now()&"""")
  57.    Echo("}")
  58. If i<Ls Then
  59.      Echo(",")
  60. EndIf
  61. Next
  62. Echo("]}")
  63. EndIf
  64. Function Echo(str)
  65.    Response.Write(str)
  66. EndFunction
  67. %>

至此,帶搜尋功能的Grid就全部完成了。