头痛的EXT girdEditor问题

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
一个可以编辑 一个不可以编辑时怎么办呢?