var cm = new Ext.grid.ColumnModel([{
id:'common',
header: "Common Name",
dataIndex: 'common',
width: 220,
editor: new fm.TextField({
allowBlank: false,
listeners:{
//我想在这里添加一个事件,让这个TextField显示的时候根据显示值来决定这个TextField是否可以
//编辑,也就是说Grid的每列的每个cell因为值不同而决定是否可编辑。帮忙看看!
}
})
},{
header: "Light",
dataIndex: 'light',
width: 130,
editor: new Ext.form.ComboBox({
typeAhead: true,
triggerAction: 'all',
transform:'light',
lazyRender:true,
listClass: 'x-combo-list-small'
})
},{
header: "Price",
dataIndex: 'price',
width: 70,
align: 'right',
renderer: 'usMoney',
editor: new fm.NumberField({
allowBlank: false,
allowNegative: false,
maxValue: 100000
})
},{
header: "Available",
dataIndex: 'availDate',
width: 95,
renderer: formatDate,
editor: new fm.DateField({
format: 'm/d/y',
minValue: '01/01/06',
disabledDays: [0, 6],
disabledDaysText: 'Plants are not available on the weekends'
})
}
]);
问题:
{
id:'common',
header: "Common Name",
dataIndex: 'common',
width: 220,
editor: new fm.TextField({
allowBlank: false,
listeners:{
//我想在这里添加一个事件,让这个TextField显示的时候根据显示值来决定这个TextField是否可以
//编辑,也就是说Grid的每列的每个cell因为值不同而决定是否可编辑。帮忙看看!
}
})
}
[code="java"]var store = new Ext.data.SimpleStore({
data : [['lcs' , 28 , 'dpc'],['mlx' , 27 , 'hfzg']],
fields : ["name" , "age" , "unit"]
});
isCellEditable = function(c,r){
var record = store.getAt(r);
if(c!=1)return true;
return record.get("age") >= 28;
};
var cm = new Ext.grid.ColumnModel({
columns : [{
header : "姓名",
dataIndex : "name",
editor : new Ext.form.TextField()
},{
header : "年龄",
dataIndex : "age",
editor : new Ext.form.TextField(),
renderer : function(value, metadata , record , r , c , store){
return isCellEditable(c,r)?value:String.format('<div style="width:100%;background:#ccc;">{0}</div>',value);
}
},{
header : "单位",
dataIndex : "unit",
editor : new Ext.form.TextField()
}],
isCellEditable : isCellEditable
});
var grid = new Ext.grid.EditorGridPanel({
renderTo : Ext.getBody(),
width : 300,
height : 260,
cm : cm,
store : store,
title : "Info"
});[/code]
作个参考吧
afterrender:function(field){
if(field.getValue()=='XXX'){
field.setDisabled(true);
}
}
应该是在beforeedit事件中进行判定,return true可以编辑,return false就不可以编辑
e.g.:
listeners : {
beforeedit : function(e){
if(e.value==""){
return false;
}
return true;
}
}
这个listener是要加在editorgridpanel中的
楼上所说 我试了一下
放在beforeedit事件里面确实有效果 但是必须要等到单击每个单元格之前触发
楼主所问应该是 grid 加载出来后 马上就可以显示出来每个cell是否可编辑
我也没弄出来 估计要重写getCellEditor这个函数
但是具体怎么改写 还没弄懂
继续等待大侠们的解答 :arrow:
如果是3.0以上版本的可以这样定义
在定义ColumnModel的时候不用传统的方式,而是用这样的方式
var colModel = new Ext.grid.ColumnModel({
columns: [...],
isCellEditable: function(col, row) {
var record = store.getAt(row);
if (record.get('readonly')) { // replace with your condition
return false;
}
return Ext.grid.ColumnModel.prototype.isCellEditable.call(this, col, row);
}
});
2.2也应该可以
事实上在render了以后,并没有渲染这些editor
楼上的方法我试了一下
确实是可以的
但是我现在如果要是这样呢 不仅仅是改变它的可编辑不可编辑
我要根据那个值来进行比如说背景色的填充啊
比如说 不可编辑的我就给它一个大红的背景 可编辑的我就给它一个大绿的背景
能做到这种扩展嘛?
是不是还需要重写一个getCellEditor这个函数呢?
求教楼上
呵呵,还是那句话,事实上在grid显示完数据的时候,这些editor并没有渲染上,你如果想加背景色的话,估计得在renderer上下功夫了。也就是这两个是分开的过程,如果要整合到一起的话,也和你说的getCellEditor没什么关系吧
upup1000 我还有个问题 你这个控制也是一行的
还是不能控制到单元格
我一行有两个控制的值value1 value2
两个单元格 editor1 editor2
一个可以编辑 一个不可以编辑时怎么办呢?