Extjs中的EditorGridPanel高级应用

摘要:在使用EditorGridPanel里,有时我们需要在不同的条件下,对不同的列才能进行编辑。比如:在OA应用中,在一个流程执行到第一步时,只允许对第一列进行编辑,其它列为只读状态,当流程执行到第二步时,可能允许对第三、四进行编辑。那么,我们可以通过ColumnModel的isCellEditable()函数来实现此功能。

实现方法:

1、首先,我们用一个变量来保存当前的可以编辑的步骤。

当流程执行到某一步骤时,不同的权限可以操作的内容会不一样,如超级管理员可以对所有的内容进行编辑,而一般的用户只能填写基本信息。所以,我们数据的方法来保存可以编辑的步骤。如:var EnableStep=[2];(表示当前可以对第二步进行操作)或者var EnableStep=[2,3];(表示当前可以对第二、三步进行操作)

2、定义好ColumnModel模型。

在定义ColumnModel模型时需要注意,我们需要增加一个step字段,用来保存某一列在第几部可以被编辑。如:(注意:也需要用数组的方式保存)

ContractedBlock.gif ExpandedBlockStart.gif Ext.grid.ColumnModel
var J_KPI_cm = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), 
    {header : 
'关键绩效指标',width : 150,dataIndex : 'Title',sortable : true,step:[1,2],
     editor : 
new Ext.form.TextField({allowBlank : false})
    },
    {header : 
'所占分值',width : 70,dataIndex : 'weight',sortable : true,align : 'center',step:[1,2],
     editor : 
new Ext.form.NumberField({allowBlank : false,maxLength : 3})
    },
    {header : 
'考核办法',width : 200,dataIndex : 'CheckMothd',sortable : true,id:'CheckMothd',renderer:TextToBr,step:[1,3],
     editor : 
new Ext.form.TextArea({allowBlank : false,maxLength : 2000,autoHeight   :true})
    },
    {header : 
'基准值',width : 70,dataIndex : 'target1',sortable : true,align : 'center',step:[1,2],
     editor : 
new Ext.form.TextField({allowBlank : false,maxLength : 10})
    },
    {header : 
'挑战值',width : 70,dataIndex : 'target2',sortable : true,align : 'center',step:[1,2],
     editor : 
new Ext.form.TextField({allowBlank : false,maxLength : 10})
    },
    {header : 
'完成情况',width : 200,dataIndex : 'Completion',sortable : true,step:[3],
     editor : 
new Ext.form.TextArea({allowBlank : false})
    },
    {header : 
'得分',width : 70,dataIndex : 'MasterScore',sortable : true,align : 'center',step:[4],
     editor : 
new Ext.form.NumberField({allowBlank : false,maxLength : 4})
    }
]);

3、意义isCellEditable函数

ContractedBlock.gif ExpandedBlockStart.gif isCellEditable
J_KPI_cm.isCellEditable=function(colIndex, rowIndex) {
    
var colId=J_KPI_cm.getColumnId(colIndex);//获取ColumnID
    var step=J_KPI_cm.getColumnById(colId).step;//获取Step
    if(step!=undefined)
        
for(var i=0;i<EnableStep.length;i++)
            
for(var j=0;j<step.length;j++)
                
if(EnableStep[i] == step[j])
                    
return Ext.grid.ColumnModel.prototype.isCellEditable.call(this, colIndex, rowIndex);
    
return false;
};

当然,你也可以根据自己的条件来限制是否可以编辑。

结论:Extjs非常灵活,大家在了解Extjs的功能后可以多看看http://extjs.com/learn/Ext_FAQ,以便实现你所需要的功能。

转载于:https://www.cnblogs.com/petali/archive/2009/01/27/1381080.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值