Ext GroupingView 生成可分組顯示的網格數據

一:首先編寫父類分組網格,可擴展,可繼承的。名稱爲:groupView.js


Ext.namespace('Ext.gr.gv');

Ext.gr.gv.ExtGroupViewGrid = Ext.extend(Ext.grid.GridPanel,{
	
	// 表格結構
	structure: null,
	// 獲取數據的URL
	url: '',
	//支持actioncolumn特性
	actioncolumn: null,
	// 默認排序字段
	defaultSortField: '',
	defaultSortDir: 'asc',
	// 關鍵字段
	keyField: null,
	// 預加載數據
	preload: true,
	// 是否需要分頁工具欄,默認爲true
	needPage: true,
	// 是否顯示分頁信息
	showPageInfo: true,
	// 每頁記錄數
	pageSize: 15,
	// 是否顯示加載提示
	loadMask: true,
	// 是否顯示邊框
	frame: false,
	
	viewConfig: {
		forceFit: true
	},
	//
	groupField: '',
	
	//組建初始化
	initComponent: function(){
	     this.initStructure();  // 根據表格結構構造ColumnModel對象和Record對象
	     
	     Ext.gr.gv.ExtGroupViewGrid.superclass.initComponent.call(this);
	},
	
	// 根據表格結構構造ColumnModel對象、Record對象、Store對象等
	initStructure: function(){
	      var oColModel = new Array();
	      var oRecord   = new Array();
	      
	      // 定義Checkbox作爲行選擇器
	      var sm = new Ext.grid.CheckboxSelectionModel();
	      this.sm = sm;
	      
	      oColModel [0] = sm;
	      
	      
	      // 構造GRID所需對象
	      for(var i=0, len =this.structure.length; i<len ;i++){
	      	//表結構的列定義
	      	var column = this.structure[i];
	      	
	      	// 如果字段爲hidden,則不生成columnMode
	      	if(column.hidden == undefined || !column.hidden){
	      		//把元素裝載到Mode裏面去
	      		oColModel[oColModel.length] = {
	      			header: column.header,
	      			dataIndex: column.name,
	      			width: column.width,
	      			sortable: column.sortable,
	      			renderer: column.renderer,
	      			locked: column.locked
	      		};
	      		
	      		// 裝載完後對某些類型進行轉換,方便子類繼承的時候,column type 直接定義成下面的type就行,自動轉換
	      		if(column.renderer != null)
	      		    oColModel[oColModel.length-1].renderer = column.renderer;
	      		else if(column.type == 'boolean')
	      		    oColModel[oColModel.length-1].renderer = 'boolean';
	      		else if(column.type == 'date')
	      		    oColModel[oColModel.length-1].renderer = Ext.util.Format.dateRenderer('Y-m-d');
	      		else if(column.type == 'datetime')
	      		    oColModel[oColModel.length-1].renderer = Ext.util.Format.dateRenderer('Y-m-d H:i:s');
	      		else 
	      		    oColModel[oColModel.length-1].renderer = Ext.grid.ColumnModel.defaultRenderer;
	      	}
	      	// 構造Record對象
	      	oRecord[oRecord.length] = {
	      		name: column.name,
	      		type: (column.type == 'date' || column.type == 'datetime') ? 'date': 'string',
	      		dateFormat: column.type == 'date' ? 'Y-m-d' : 'Y-m-d H:i:s'
	      	};
	      }
	      
	      //增加actioncolumn列
	      if(this.actioncolumn != null){
	      	oColModel [this.structure.length] = this.actioncolumn;
	      } 
	      
	      //構造columnModel
	      this.cm = new Ext.grid.ColumnModel(oColModel);
	      this.oColModel = this.cm;
	      
	      //默認可排序
	      this.cm.defaultStortable = true;
	      
	      var record = Ext.data.Record.create(oRecord);
	      var reader = new Ext.data.JsonReader({
	      	  totalProperty : 'totalCount',
	      	  root: 'result',
	      	  id: this.keyField
	      }, record);
	      
	      //構造store對象
	      this.ds = new Ext.data.GroupingStore({
	           proxy : new Ext.data.HttpProxy({
	           	     url : this.url
	           }),
	           reader: reader,
	           autoLoad:false,//設爲false,由後面的代碼進行preload控制
	           sortInfo:{
	                field: this.defaultSortField,
	                direction: this.defaultSortDir
	           },
	           groupField: this.groupField //設置默認的分組字段
	      });
	      this.store = this.ds;
	      
	      
	      // 添加分頁工具欄  
		  if (this.needPage){
				var pagingToolbar = new Ext.PagingToolbar({
					store: this.ds,
					pageSize: this.pageSize,
					displayInfo: this.showPageInfo,
					displayMsg: '第 {0} - {1} 條記錄 /  共 {2} 條記錄',
					emptyMsg: '<font color="red">提示:沒有任何符合條件的記錄!</font>'
				});
				this.bbar = pagingToolbar;
				this.bottomToolbar = this.bbar;
		  }
		
		  // 加載數據列表
		if(this.preload)
			this.store.load({params:{start:0, limit:this.pageSize}});
		
			
	    //分組初始參數設置
		this.view = new Ext.grid.GroupingView({
			forceFit: true,
			showGroupName: false,
			enableNoGroups: false,
			enableGroupingMenu: true,
			hideGroupedColumn: true
		});
	},
	// 改變表格的URL
	changeUrl: function(url){
		this.url = url;
		this.store.proxy.setUrl(url, true);
	},
	
	// 獲取表格每頁記錄數
	getPageSize: function(){
		return this.bottomToolbar.pageSize;
	},
	
	//獲取表格中被選擇的記錄的主鍵id數組
	getSelKeyIds: function(){
		var sel = this.getSelectionModel().getSelections();
		if(sel.length > 0){
			var ids = new Array();
			for(var i=0; i<sel.length; i++){
				ids.push(sel[i].get(this.keyField));
			}
			return ids	
		}
		return null;
	}
})










二:自定義顯示數據的網格,繼承 Ext.gr.gv.ExtGroupViewGrid


      

Ext.namespace('Ext.gr.gv');

Ext.gr.gv.PageEleGroupGrid = Ext.extend(Ext.gr.gv.ExtGroupViewGrid,{
	
	border : true,
	groupField: 'bigTypeid',
	
	templateId: null,
	
	initComponent: function(){
		this.tbar = ['-',{
			text: '新增頁面元素',
			tooltip: '新增只隸屬於當前模板的頁面元素',
			iconCls: 'icon-add',
			handler: this.addSpecPageElement,
			scope: this
		},'-',{
			text: '刷新',
		    iconCls: 'refresh',
		    handler: this.onRefresh,
		    scope: this
		},'-'];
		
		var gridStructure = [{
			name: 'dbid',
			hidden: true
		},{
			name: 'bigTypeid',
			header: '大類編號',
			sortable: true
		},{
			name: 'typeName',
			header: '小類名稱',
			width: 150,
			sortable: true
		},{
			name: 'des',
			header: '小類描述',
			width: 230,
			sortable: true
		}];
		
		this.structure = gridStructure;
		
		this.defaultSortField = 'dbid';
		this.keyField = 'dbid';
		
		this.deleteMsg = '確認要刪除選中的頁面元素嗎?<br/>';
		this.deleteMsgBoxWidth = 370;
		
		Ext.gr.gv.PageEleGroupGrid.superclass.initComponent.call(this);
	}
});


三 :新建Panel,裝載查詢form和網格


      

Ext.namespace('Ext.gr.gv');


Ext.gr.gv.groupGirdPanel = Ext.extend(Ext.Panel,{
	
	layout: 'border',
	gridUlr:'',
	formPanel: null,
	grid: null,
	
	templateInfoPanel: null, //模板基本信息面板
	
	changeRelatedTable: false, //是否修改了關聯業務表,包括主表或從表的任意改動
	oldMasterTableValue: '',
	oldSlaveTablesValue: '',
	
	// 組件事件初始化
	initComponent: function(){
		Ext.gr.gv.groupGirdPanel.superclass.initComponent.call(this);
		
		var groupFormPanel = new Ext.FormPanel({
			region : 'north',
			//layout: 'column',
			height: 100,
			labelAlign: 'right',
			labelWidth: 65,
			frame: true,
			margins: '1 1 2 1',
			border: true,
			items:[{
				    layout: 'column',
				    items:[{
				    	 columnWidth : .5,
				    	 layout : 'form',
				    	 items:[{
					    	 	xtype: 'textfield',
		       					itemType: 'boolean',
		       					fieldLabel: '模板名稱',
							    name: 'moduleName',
							    anchor:'80%'
				    	 }]
				    },{
				    	columnWidth : .5,
				    	 layout : 'form',
				    	 items:[{
					    	 	xtype: 'textfield',
		       					itemType: 'boolean',
		       					fieldLabel: '模板內容',
							    name: 'moduleContent',
							    anchor:'80%'
				    	 }]
				    },
				    {
				         columnWidth : .7,
				    	 layout : 'form',
						 html:' '
					},
					{
				    	columnWidth : .2,
				    	layout: 'hbox',
					    defaults:{margins:'0 5 0 0'},
				    	items:[{
					    		 xtype: 'button',
								 text: '查詢',
								 width: 80,
								 iconCls: 'icon-find',
								 handler: this.searchs,
								 scope: this,
								 align:'right'
				    	},{
				    		     xtype: 'button',
								 text: '清空',
								 width: 80,
								 handler: this.clear,
								 scope: this
				    	}]
				    }
				 ]
			}]
		});
	
		this.add(groupFormPanel);
		this.formPanel = groupFormPanel;
		
		
		var groupGrid = new Ext.gr.gv.PageEleGroupGrid({
			region: 'center',
    		margins: '1 0 0 0',
    		pageSize: 10,
		    url: '${ctx}/bookmodules/small-type!list.action'
		});
		
		this.add(groupGrid);
	}
})


四:最後JSP頁面顯示

        

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ include file="/common/taglibs.jsp" %>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <%@ include file="/wf/public/meta_wf.jsp"%>
    
    <title>My JSP 'view-grid.jsp' starting page</title>
    
	 
	  <!-- 自定義 -->
	  <script src="${ctx}/gzcgZF/app/bookmodules/js/group/groupView.js" type="text/javascript"></script>
      <script src="${ctx}/gzcgZF/app/bookmodules/js/group/gro-gri-pan.js" type="text/javascript"></script>
      <script src="${ctx}/gzcgZF/app/bookmodules/js/group/my-group-view.js" type="text/javascript"></script>

      <script type="text/javascript">
		   Ext.onReady(function(){
		           Ext.QuickTips.init();
		           
				   var groupGirdPanel = new Ext.gr.gv.groupGirdPanel({
				   });
				
				   //定義主界面整體佈局
			       var viewport = new Ext.Viewport({
			    	   layout: 'fit',
					   items: [groupGirdPanel]
			       });
	        });
	</script>
  </head>
  
  <body>
     
  </body>
</html>

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