EXTJS之GRID 二

6.Json數據

至於這種數據的類型請大家自己看Ajax的書籍:

Js代碼 複製代碼
  1.  //JsonData   
  2. var data = {    
  3.     'coders': [   
  4.         { 'id''1''sex''male''name':'McLaughlin''descn''[email protected]' },   
  5.         { 'id''2''sex''male','name':'Hunter''descn''[email protected]' },   
  6.         { 'id''3''sex''female','name':'Harold''descn''[email protected]' },   
  7.         { 'id''4''sex''male','name':'Harolds''descn''[email protected]' }   
  8.     ],   
  9.     'musicians': [   
  10.         { 'id''1''name''Clapton''descn''guitar' },   
  11.         { 'id''2''name''Rachmaninoff''descn''piano' }   
  12.     ]   
  13. }   
  14. //ds使用的MemoryProxy對象和JsonReader對象   
  15. var ds = new Ext.data.Store({   
  16.         proxy: new Ext.data.MemoryProxy(data),   
  17.         reader: new Ext.data.JsonReader({root: 'coders'}, [   
  18.             {name: 'id'},   
  19.             {name: 'sex'},   
  20.             {name: 'name'},   
  21.             {name: 'descn'}   
  22.         ])   
  23.     });   
  24. ds.load();   
  25. var grid = new Ext.grid.GridPanel({   
  26.     el: 'grid3',   
  27.     ds: ds,   
  28.     cm: cm,   
  29.     sm: sm,   
  30.     title: 'HelloWorld',   
  31.     autoHeight: true//一定要寫,否則顯示的數據會少一行   
  32. });   
  33. grid.render();  

 

7.使用XML數據:

注意,讀取XML數據必須在服務器上進行。

XML數據test.xml的內容:

Xml代碼 複製代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <dataset>  
  3.      <results>2</results>  
  4.      <item>  
  5.            <id>1</id>  
  6.            <sex>male</sex>  
  7.            <name>Taylor</name>  
  8.            <descn>Coder</descn>  
  9.      </item>  
  10. </dataset>var ds3 = new Ext.data.Store({   
  11.     url: 'test.xml',   //XML數據   
  12.     reader: new Ext.data.XmlReader({record: 'item'}, [  //使用XmlReader對象   
  13.         {name: 'id'},   
  14.         {name: 'sex'},   
  15.         {name: 'name'},   
  16.         {name: 'descn'}   
  17.     ])   
  18. });  

 

8.從服務器獲取數據和數據翻頁控件

從一個服務器文件,如ASP、JSP或Servlet中獲得數據二維Array、JSON或XML數據,也可以被Ext讀取,並被Grid顯示:

服務器文件data.asp:

Js代碼 複製代碼
  1. <%   
  2.     start = cint(request("start"))   
  3.     limit = cint(request("limit"))   
  4.     dim json   
  5.     json=cstr("{totalProperty:100,root:[")      
  6.     for i = start to limit + start-1   
  7.         json =json + cstr("{'id':'") +cstr(i) + cstr("','name':'name") + cstr(i) + cstr("','descn':'descn") + cstr(i) + cstr("'}")   
  8.         if i <> limit + start - 1 then   
  9.             json =json + ","  
  10.         end if  
  11.     next   
  12.     json = json +"]}"  
  13.     response.write(json)   
  14. %>  

 我們可以看到,這個頁面會根據傳入的start和limit的不同,返回不同的數據,其實質是個分頁的代碼。下面是start=0,limit=10的JSON數據:

Js代碼 複製代碼
  1. {totalProperty:100,root:[{'id':'0','name':'name0','descn':'descn0'},{'id':'1','name':'name1','descn':'descn1'},{'id':'2','name':'name2','descn':'descn2'},{'id':'3','name':'name3','descn':'descn3'},{'id':'4','name':'name4','descn':'descn4'},{'id':'5','name':'name5','descn':'descn5'},{'id':'6','name':'name6','descn':'descn6'},{'id':'7','name':'name7','descn':'descn7'},{'id':'8','name':'name8','descn':'descn8'},{'id':'9','name':'name9','descn':'descn9'}]}  

 

我們使用分頁控件來控制Grid的數據:

Js代碼 複製代碼
  1. Ext.onReady(function(){   
  2.     var sm = new Ext.grid.CheckboxSelectionModel();   
  3.     var cm = new Ext.grid.ColumnModel([   
  4.         new Ext.grid.RowNumberer(),   
  5.         sm,   
  6.         {header:'編號',dataIndex:'id'},   
  7.         {header:'性別',dataIndex:'sex'},   
  8.         {header:'名稱',dataIndex:'name'},   
  9.         {header:'描述',dataIndex:'descn'}   
  10.     ]);   
  11.     cm.defaultSortable = true;   
  12.     var ds = new Ext.data.Store({   
  13.         proxy: new Ext.data.HttpProxy({url:'data.asp'}),   
  14.         reader: new Ext.data.JsonReader({   
  15.             totalProperty: 'totalProperty',   
  16.             root: 'root'  
  17.         }, [   
  18.             {name: 'id'},   
  19.             {name: 'name'},   
  20.             {name: 'descn'}   
  21.         ])   
  22.     });   
  23.     ds.load({params:{start:0,limit:10}});   
  24.     var grid = new Ext.grid.GridPanel({   
  25.         el: 'grid3',   
  26.         ds: ds,   
  27.         cm: cm,   
  28.         sm: sm,   
  29.         title: 'ASP->JSON',   
  30.         bbar: new Ext.PagingToolbar({   
  31.             pageSize: 10,   
  32.             store: ds,   
  33.             displayInfo: true,   
  34.             displayMsg: '顯示第 {0} 條到 {1} 條記錄,一共 {2} 條',   
  35.             emptyMsg: "沒有記錄"  
  36.         }),   
  37.         tbar: new Ext.PagingToolbar({   
  38.             pageSize: 10,   
  39.             store: ds,   
  40.             displayInfo: true,   
  41.             displayMsg: '顯示第 {0} 條到 {1} 條記錄,一共 {2} 條',   
  42.             emptyMsg: "沒有記錄"  
  43.         })   
  44.     });   
  45.     grid.render();   
  46. })  

 

10.如何在Grid的上方添加按鈕呢?

添加按鈕的關鍵之處在於tbar或bbar屬性設置Toolbar工具條:

Js代碼 複製代碼
  1. var grid = new Ext.grid.GridPanel({   
  2.     el: 'grid3',   
  3.     ds: ds,   
  4.     cm: cm,   
  5.     sm: sm,   
  6.     title: 'HelloWorld',   
  7.     tbar: new Ext.Toolbar({    
  8.         items:[    
  9.                 {    
  10.                     id:'buttonA'    
  11.                     ,text:"Button A"    
  12.                     ,handler: function(){ alert("You clicked Button A"); }    
  13.                 }    
  14.                ,   
  15.                 new Ext.Toolbar.SplitButton({})   
  16.                 ,{    
  17.                     id:'buttonB'    
  18.                     ,text:"Button B"    
  19.                     ,handler: function(){ alert("You clicked Button B"); }    
  20.                 }    
  21.                 ,   
  22.                 '-'  
  23.                 ,{   
  24.                     id:'buttonc'    
  25.                     ,text:"Button c"  
  26.                 }   
  27.             ]    
  28.         })    
  29. });  

 

11.將GridPanel放入一個Panel或TabPanel中

Js代碼 複製代碼
  1. var tabs = new Ext.TabPanel({   
  2.     collapsible: true  
  3.     ,renderTo: 'product-exceptions'  
  4.     ,width: 450   
  5.     ,height:400   
  6.     ,activeTab: 0   
  7.     ,items:[   
  8.         {   
  9.             title: 'Unmatched'  
  10.         },{   
  11.             title: 'Matched'  
  12.         }   
  13.     ]   
  14. });   
  15. tabs.doLayout();   
  16. var panel = new Ext.Panel({   
  17.     renderTo: 'panel',   
  18.     title:'panel',   
  19.     collapsible:true,   
  20.     width:450,   
  21.     height:400,   
  22.     items:[grid] //管理grid   
  23. });  

 Panel必須有DIV存在。其包含的Component有items管理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章