EXT JS GridPanel列动态生成

  • 说明:我使用的ExtJs版本是3.2,代码片段是基于实际项目
  • gridpanel动态生成列的核心就是在后台拼凑columnmodel和store
  • 此博客只是我自己记录为方便以后能更快处理类似问题,如果不能给你带来帮助,不喜勿喷
  •  JS片段,动态生成ColumnModel和GridStore
//动态生成grid列
function dynamicColumn(organId) {
	Ext.Ajax.request({
		url: path + "/depreciReport.do?method=genGridColumn",
		params: 'orgId=' + orgId,
		method: 'POST',
		success: function(v) {
			var myData = Ext.util.JSON.decode(v.responseText); // 得到服务器反回数据
			var columnDate = new Array();
			if (myData.success) {
				monthDeprReportGridStore = new Ext.data.Store({
					reader: new Ext.data.JsonReader({
						totalProperty: 'totalProperty',
						root: 'root'
					},
					myData.store)
				});
				monthDeprReportGridCm = new Ext.grid.ColumnModel(eval(myData.column));
				monthDeprReportGrid.reconfigure(monthDeprReportGridStore, monthDeprReportGridCm);
				monthDeprReportPaging.bindStore(monthDeprReportGridStore);
			}
		}
	});
}
  • JAVA后台代码片段,主要是拼出store和columnmodel的json串
  • /**
    	 * 
    	 * @Title: getColumnModel   
    	 * @Description: 动态生成grid表头
    	 * @param: @param mapping
    	 * @param: @param form
    	 * @param: @param request
    	 * @param: @param response
    	 * @param: @return      
    	 * @return: ActionForward      
    	 * @throws
    	 */
    	public ActionForward genGridColumn(ActionMapping mapping,
    			ActionForm form, HttpServletRequest request,
    			HttpServletResponse response) {
    		String organId = request.getParameter("organId");//单位ID
    		List<UnitList> list = new ArrayList<UnitList>();
    		if(StringUtils.isEmpty(organId)){
    			organId = request.getSession().getAttribute(LoginConstant.ORGANID).toString();
    		}
    		list = this.depreciReportService.findBySql(UnitList.class,"select unit_id,unit_name from unit_list where is_enabled='1' and "
    				+ "(unit_id != unit_pid"
    				+ "	OR ((SELECT COUNT (*) FROM unit_list u WHERE u.unit_pid = unit_list.unit_pid) = 1))"
    				+ " and organ_id="+organId+" order by unit_id");
    		String column = "[" ;
    		String store  =  "[{name : 'kjqj'}," +
    				"{name : 'classCode'}," +
    				"{name : 'className'},";
    		column =  "["+
    		        "{header : '会计期间',width : 80,align : 'center',sortable : false,dataIndex : 'kjqj',menuDisabled :true},"+
    		        "{header : '类别编号',width : 150,align : 'left',sortable : false,dataIndex : 'classCode',menuDisabled :true},"+
    		        "{header : '类别名称',width : 120,align : 'left',sortable : false,dataIndex : 'className',menuDisabled :true}";
    		if(list != null && list.size() > 0){
    			for (UnitList unitlist : list) {
    				column += ",{header : '"+unitlist.getUnitName()+"',width : 150,align : 'right',sortable : false,dataIndex : 'unit"+unitlist.getUnitId()+"',menuDisabled :true}";
    				store += ",{name : 'unit"+unitlist.getUnitId()+"'}";
    			}
    		}
    		column += "]";
    		store +=  "]";
    		
    		
    		JSONObject jo = new JSONObject();
    		jo.put("column", column);
    		jo.put("store", store);
    		jo.put("success", true);
    		PrintWriter out = null;
    		try {
    			out = response.getWriter();
    			out.print(jo.toString());
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		out.close();		
    		
    		return null;
    	}
     拼接触的columnModel json串
  • [{
    	header: '会计期间',
    	width: 80,
    	align: 'center',
    	sortable: false,
    	dataIndex: 'kjqj',
    	menuDisabled: true
    }, {
    	header: '类别编号',
    	width: 150,
    	align: 'left',
    	sortable: false,
    	dataIndex: 'classCode',
    	menuDisabled: true
    }, {
    	header: '类别名称',
    	width: 120,
    	align: 'left',
    	sortable: false,
    	dataIndex: 'className',
    	menuDisabled: true
    }, {
    	header: '公司领导',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10042',
    	menuDisabled: true
    }, {
    	header: '董事会/总经理办公室',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10043',
    	menuDisabled: true
    }, {
    	header: '企业发展与考核部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10044',
    	menuDisabled: true
    }, {
    	header: '运营与投资管理部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10045',
    	menuDisabled: true
    }, {
    	header: '安全质量技术管理部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10046',
    	menuDisabled: true
    }, {
    	header: '人力资源部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10047',
    	menuDisabled: true
    }, {
    	header: '财务部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10048',
    	menuDisabled: true
    }, {
    	header: '法律事务部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10049',
    	menuDisabled: true
    }, {
    	header: '纪检监察审计部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10050',
    	menuDisabled: true
    }, {
    	header: '党委工作部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10051',
    	menuDisabled: true
    }, {
    	header: '工会',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10054',
    	menuDisabled: true
    }, {
    	header: '信息化部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10055',
    	menuDisabled: true
    }, {
    	header: '科技与国际合作部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10056',
    	menuDisabled: true
    }, {
    	header: '南方区域事业部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10058',
    	menuDisabled: true
    }, {
    	header: '北方区域事业部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10059',
    	menuDisabled: true
    }, {
    	header: '西南区域事业部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10060',
    	menuDisabled: true
    }, {
    	header: '华东区域事业部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10061',
    	menuDisabled: true
    }, {
    	header: '北京区域事业部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10062',
    	menuDisabled: true
    }, {
    	header: '工程技术研究院',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10063',
    	menuDisabled: true
    }, {
    	header: '安保离退事务部',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10191',
    	menuDisabled: true
    }, {
    	header: '存量土地开发项目办公室',
    	width: 150,
    	align: 'right',
    	sortable: false,
    	dataIndex: 'unit10194',
    	menuDisabled: true
    }]

    store 对应的json串

  • [{
    	name: 'kjqj'
    }, {
    	name: 'classCode'
    }, {
    	name: 'className'
    }, , {
    	name: 'unit10042'
    }, {
    	name: 'unit10043'
    }, {
    	name: 'unit10044'
    }, {
    	name: 'unit10045'
    }, {
    	name: 'unit10046'
    }, {
    	name: 'unit10047'
    }, {
    	name: 'unit10048'
    }, {
    	name: 'unit10049'
    }, {
    	name: 'unit10050'
    }, {
    	name: 'unit10051'
    }, {
    	name: 'unit10054'
    }, {
    	name: 'unit10055'
    }, {
    	name: 'unit10056'
    }, {
    	name: 'unit10058'
    }, {
    	name: 'unit10059'
    }, {
    	name: 'unit10060'
    }, {
    	name: 'unit10061'
    }, {
    	name: 'unit10062'
    }, {
    	name: 'unit10063'
    }, {
    	name: 'unit10191'
    }, {
    	name: 'unit10194'
    }]

猜你喜欢

转载自blog.csdn.net/SUPERLEIJIAWEI/article/details/82149111