ExtJs grid(二)注意事项及例子

一:grid中的selModel三种选择模型:

RowSelectionModel:

	 var sr=new Ext.grid.RowSelectionModel({
	 	singleSelect:true,
	 	listeners: {
                        rowselect: function(sm, row, rec) {
//                        	alert(rec.get('deptno'));
//                        	store2.removeAll();
                        	var n=rec.get('deptno');
                        	store2.baseParams={deptno:n};
                        	store2.load({params:{start:0,limit:1}});
                        }
                    }
	 });

CheckSelectionModel:

 var chbox=new Ext.grid.CheckboxSelectionModel();

注意chbox,它是个复选框,不但要在grid里面配置sm,还要在columnModel中配置一列.且要是同一个。而RowSelectionModel则只要在grid配置sm即可.


还有CellSelectionModel也差不多.

二:CoumnModel:

dataIndex对应的是store中的各个列,是你命名的,而不是后台mapping的那个值,renderer是指在当你要渲染这列的时候,则会先调用所指定的函数,

例如:

renderer:function(val){

     return '$'+val;

}

这就会变成这列里面的每个值的前面都会带个$,但是注意它的值还是store里面对应的,而不会有带$

以下是关于grid的例子:

var path = '/My_ExtJs';
Ext.onReady(function() {
	Ext.QuickTips.init();
	var myReader = new Ext.data.JsonReader( {
		idProperty : 'DEPTNO',
		root : 'data',
		totalProperty : 'total_num',//总记录数
		fields : [ {
			name : 'mid',
			mapping : 'DEPTNO'
		}, {
			name : 'name',
			mapping : 'DNAME'
		}, {
			name : 'job',
			mapping : 'LOC'
		} ]
	});

//	Ext.data.Api.actions['read'] = 'load';
//	var myStore = new Ext.data.Store( {
//		reader : myReader,
//		proxy : new Ext.data.HttpProxy( {
//			api : {
//				'load' : {
//					'method' : 'GET',
//					url : path + '/servlet/My_Servlet'
//				}
//			}
//		})
//	});
	
		var myStore = new Ext.data.Store( {
		reader : myReader,
		proxy : new Ext.data.HttpProxy( {
				method : 'GET',
				url : path + '/servlet/My_Servlet'
		})
	});
	
	var grid = new Ext.grid.EditorGridPanel( {
		store : myStore,
		loadMask: true,// 必须grid先于load
		height : 300,
		width : 700,
		selModel: new Ext.grid.RowSelectionModel({
			singleSelect: true
		}),
		colModel : new Ext.grid.ColumnModel( {
			defaults : {
				width : 120,
				header : '选项'
			},
			title : 'Json',
			columns : [
			new Ext.grid.RowNumberer(), //行号
			{
				id : 'mid',
				sortable : true,
				dataIndex : 'mid'
			}, {
				header : '姓名',
				dataIndex : 'name',
				align : 'right'
			}, {
				header : '改变',
				dataIndex : 'job',
				align : 'right',
				editor: new Ext.form.TextField({
	                allowBlank: false
	            })
			},{
				header : '操作',
				xtype: 'actioncolumn',
				width: 100,
				align : 'center',
				items: [{
					 icon   : '../shared/icons/fam/delete.gif', 
					handler: function(g,rowIndex,colIndex,item,evt){
						var rs = g.getStore().getAt(rowIndex);
						//遮盖,主要是通过gridView来操作
						g.rsLoadMask = new Ext.LoadMask(g.getView().getRow(rowIndex),{msg: "正在更新数据..."});
						g.rsLoadMask.show();
						Ext.Ajax.request({
							url: g.getStore().proxy.api['load'].url,
							method: 'GET',
							params: {'job': rs.get('job')},
							callback: function(op,success,resp){
								g.rsLoadMask.hide();
								Ext.MessageBox.alert("提示",Ext.util.JSON.decode(resp.responseText)['msg'],function(){
									rs.commit();//单条记录提交
//									rs.reject();//返回修改之前的那一条
//									g.getStore.commitChanges();//提交全部修改的
//									g.getStore.rejectChanges();//返回修改之前的全部的
									
								});
							}
						});
					}
				},{
					 icon   : '../shared/icons/fam/accept.png', 
					handler: function(g,rowIndex,colIndex,item,evt){
						var rs = g.getStore().getAt(rowIndex);
						g.rsLoadMask = new Ext.LoadMask(g.bwrap,{msg: "请等待..."});
						g.rsLoadMask.show();
						Ext.Ajax.request({
							url: g.getStore().proxy.api['load'].url,
							method: 'GET',
							params: {'job': rs.get('job')},
							callback: function(op,success,resp){
								g.rsLoadMask.hide();
								Ext.MessageBox.alert("提示",Ext.util.JSON.decode(resp.responseText)['msg'],function(){
									g.getStore().remove(rs);	
								});
							}
						});
					}
				}]
			} ]
		}),
		tbar : new Ext.PagingToolbar( {
			pageSize : 5,
			store : myStore,
			displayInfo : true,
			displayMsg : '显示 {0} - {1} 总记录数 {2}',
			emptyMsg : "无数据"
		})
	});	
	grid.render("d");
	myStore.load();
//	myStore.loadData(d);
});





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用ExtJS 4.2.1的完整例子,可以将Grid表格导出为Excel文件: ``` Ext.require([ 'Ext.grid.*', 'Ext.data.*', 'Ext.util.*', 'Ext.toolbar.Paging', 'Ext.ux.exporter.Exporter' ]); Ext.onReady(function() { // 模拟数据 var data = []; for (var i = 0; i < 20; i++) { data.push({ name: 'User ' + i, email: 'user' + i + '@example.com', phone: '555-' + Ext.Number.randomInt(1000, 9999) }); } // 创建数据模型 Ext.define('User', { extend: 'Ext.data.Model', fields: ['name', 'email', 'phone'] }); // 创建数据源 var store = Ext.create('Ext.data.Store', { model: 'User', data: data, proxy: { type: 'memory', reader: { type: 'json', root: 'data' } } }); // 创建Grid表格 var grid = Ext.create('Ext.grid.Panel', { store: store, columns: [{ text: 'Name', dataIndex: 'name' }, { text: 'Email', dataIndex: 'email', flex: 1 }, { text: 'Phone', dataIndex: 'phone' }], width: 400, height: 200, dockedItems: [{ xtype: 'toolbar', dock: 'top', items: [{ xtype: 'button', text: 'Export to Excel', handler: function() { // 导出Excel Ext.ux.exporter.Exporter.exportGrid(grid, 'Excel', { title: 'User List' }); } }] }, { xtype: 'pagingtoolbar', store: store, dock: 'bottom', displayInfo: true }] }); // 渲染Grid表格 Ext.create('Ext.container.Viewport', { layout: 'fit', items: [grid] }); }); ``` 在上面的代码中,我们首先定义了一个模拟数据数组,然后创建了一个数据模型和一个数据源。接下来,我们创建了一个Grid表格,将数据源绑定到该表格中,并添加了一个工具栏和一个分页工具栏。在工具栏中,我们添加了一个按钮,当用户单击该按钮时,将调用Ext.ux.exporter.Exporter.exportGrid函数将Grid表格导出为Excel文件。 需要注意的是,我们使用了Ext.ux.exporter.Exporter类来执行导出操作。该类是ExtJS的一个扩展,需要在应用程序中明确声明。在本例中,我们使用了Ext.require函数来加载必需的类和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值