首页 > 代码库 > datagrid行编辑如何实现级联?

datagrid行编辑如何实现级联?

还是级联的问题,不过这一次,是在datagrid里,那么难度上肯定比form中的级联要高。

但是只要熟练掌握了datagrid的API,问题还是很容易就可以解决的。

关键点在于——editor,关于datagrid实现编辑功能全要靠它。


先实现行编辑


比如在datagrid中要实现某一列可编辑,那么需要在那一列的column中配置editor属性

editor的配置可以只指定type,也就是编辑框的类型,可以是combobox,datebox等easyUI配备的一些类型

若对这些编辑框有额外的属性,需要在editor中再配置一个options的json,比如options:{data:[{1:‘a‘},{2:‘b‘}]}等

实现了行编辑,下面才能基于行编辑实现级联。


实现航编辑级联


这里我们先来说一个具体的需求吧,比如编辑行中有一个接受和拒绝的下拉框,选了拒绝之后需要填写拒绝理由,也就是说若选择接受,拒绝理由那一列是不可编辑的。

怎么做呢?思路还是和form中的级联一样,也就是在选中的(onSelect)事件中来控制,这个倒简单,关键是如何来得到拒绝理由那一列并将其设置成不可编辑的?

还记得前面讲的editor吗?我们配置的editor是可以通过行索引(index)+ 字段名(field)来得到的,试试吧

比如拒绝理由那一栏的field是reason,那么我们根据编辑行索引editIndex和field就可以得到改单元格的editor了

var editor = $('#dg').datagrid('getEditor', {index:editIndex, field:'reason'})

之后可以通过editor.target来得到easyUI的组件,如combobox之类。然后再调用combobox.combobox(‘disable‘)就可以将那一列设置为不可编辑了。

之前我们form表单级联举的省市级联的例子也可以用类似的思路来做,这里就不赘述了。

做到这一步就结束了吗?那么我们只处理了选中事件中的级联控制,那么若是保存之后再编辑呢?此时值已经存在于row中了,并不会触发onSelect事件,那么如何完善这些步骤呢?


需要完善的步骤


首先,每次“编辑开始”的时候都要检查主combobox中的值是否为拒绝,若是,则将级联项设置为可编辑,否则不可编辑

其中“编辑开始”包括append方法和onRowClick方法

其次,每次主combobox的onSelect事件时都要检查选中的是否为拒绝,若是,则将级联项设置为可编辑,否则不可编辑

这样就完成datagrid行编辑的级联。


题外话


其实若是不熟悉datagrid的API的话,想实现级联那是太麻烦了。

我之前就是不知道有editor的API,然后就自己手动去获取元素做级联,

类似于这样的语句:$("[field=‘isout‘]", $(".datagrid-body")).nextAll().find(‘.textbox input:first‘).attr("disabled", "disabled");

实在是麻烦且容易出错


datagrid行编辑如何实现级联?