EXTJS系列笔记(6.X)————gridpanel根据数据动态加载需要的列,同时列根据不同值显示不同颜色

现在的开发中,出现一个需求,就是需要在界面 中根据后台的数据动态的显示 gridpanel的列,同时需要固定某些列,闲话不说,先看代码,

在 主界面中  只有一个 gridpanel,其他啥也没有,看下:

{
	xtype:"gridpanel",
	width:"100%",
	title:"详细信息EQPID",
	id:"lotview_lotdetail_eqpid",
	border:false,
	enableLocking:true,//为了使用锁定列,需要开启这个配置
	columns : []
}

现在就需要在方法中 给这个 gridpanel动态的添加列 和 数据

首先  添加extjs的model,有几个列是固定的,所以这里写死

//grid的列对象
var colObj = [];

colObj.push({
text : 'Stage',
locked: true,			//表示锁定
dataIndex : 'stage'
});
colObj.push({
text : 'Recipe ID',
locked: true,
dataIndex : 'recipeId'
});
colObj.push({
	text : 'Recipe Seq',
	locked: true,
	dataIndex : 'recipeSeq'
});
 //创建一个 新的model 
var colModel = Ext.create("Ext.data.Model",{
 fields: colObj
});
//添加data,这里的rtnObj是后台过来的数据json对象
for(var i=0;i<rtnObj.length;i++){
	 var objTmp = {
			  "stage":rtnObj[i].stage,
			  "recipeId":rtnObj[i].recipeId,
			  "recipeSeq":rtnObj[i].recipeSeq 
	 }
	 data.push(objTmp)
}
//创建一个 store
var newStore = Ext.create('Ext.data.Store', {
 model: colModel,
 data:data
});
//重新替换  store和列,注意,主要是这句
panel.reconfigure( newStore,colObj);

上面的最后一句代码,是关键,替换gridpanel中的store和columns。

到这里,已经完成 对gridpanel的动态添加列,这时,又得到一个需求,需要将列的值根据不同的值显示不同颜色。

var columns  = panel.getColumns();
Ext.each(columns,function(column){
	 //除了几个固定的  列,其他列都需要添加render方法
	column.renderer = function(value,row){
		if(value=="1"){
			row.css="myColor";			//自己定义的 css样式,例:  .myColor{background: #E0E0E0;}
		}
		
		return value;
	}
})

这里可能有的同学会有问题,因为我的主页面是tabpanel,所以第一次加载数据的时候并没有渲染,等点击标签页的时候再加载,所以没问题,但是如果有的同学本来就是在一个panel中,因为已经加载完了数据,所以再配置这个方法的时候会发现没有触发显示不同颜色的效果,这里,我想到两个方法,没有实际过,有需要的同学可以参考一下,

第一个:重新渲染,将当前的panel重新渲染的他的父组件上,例 panel.render("父组件ID");

第二个:第一个我们  替换的时候 ,不替换store,就是这句话panel.reconfigure( newStore,colObj);修改成

panel.reconfigure( null,colObj);

等给 columns添加完方法属性以后,我们重新用panel.setStore()这个方法来设置store。

 

上一篇:改变JAVA窗体属性的操作方法


下一篇:python – Pandas中的多维/嵌套DataFrame / Dataset / Panel