EditorGridPanel中控制每一单元格是否可编辑

 

EditorGridPanel,顾名思义,就是对GridPanel加入了编辑数据的功能,有了它,我们就可以像直接操作数据库表一样对其进行增删改。同时更改多条数据,一并提交至服务器,无论从效率上还是从用户体验上,都是一件很爽的事情。

EditorGridPanel实际上是GridPanel的子类,具有GridPanel的特性。不同之处在于他的ColumnModel中,多出一项editor

例如:

    {

        header: '期初借方余额', width: 100, dataIndex: 'initDebit', align: 'center',
               editor: new Ext.Editor(new Ext.form.NumberField({width: 100}))

    }

这是EditorGridPanel的一列,第一行代码和GridPanel没啥区别,然后多了一个editor哈,属性的值是一个Editor类,实例化Editor类的时候提供了一个参数,就是这个editor所使用的编辑器,神马textfield啦、numberfield啦、combo啦都可以~

那么我们继续思考,有了Editor,可以对数据进行编辑了,但实际运用过程中,很多数据的编辑是有条件的。ColumnModel使得这个EditorGridPanel的一列全能够编辑,没办法控制啊,例如我这里遇到的情况:财务系统初始化期初余额,财务科目的余额是有方向的,借→只能填期初借方余额,而期初贷方余额为0(即不可编辑),贷同理。

 


解决方法:利用EditorGridPanel的beforeedit事件,该事件在用户激活了某一列的editor时触发,该条record作为参数的一部分传入了事件处理函数,故我们可以通过判断当前数据的性质决定是否允许其编辑。

listeners: {
          // 在点击进入编辑状态之前,判断该单元格是否具备可编辑条件
          beforeedit: function(e) {

       // e.column可以判定激活了那一列的编辑器,在这个例子中,就是指用户是想编辑期初借方余额还是期初借方余额
              switch(e.column) {
                  case 6: {
                      if (e.record.get('direction') == 1) {
                          e.cancel = true; // 如果余额方向是1,表示该科目方向为贷,故取消用户想要编辑借方余额的操作
                      }
                      break;
                  }
                  case 7: {
                      if (e.record.get('direction') == 0) {
                          e.cancel = true;
                      }
                      break;
                  }
              }
          }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值