easyui 可编辑datagrid comobox多选不显示及值存储问题

话不多说,直接上干货。

行编辑使用comobox组件多选不显示问题,主要是由于多选的值是以逗号隔开,且第一个是空的,需要在开启行编辑状态后、结束行编辑状态结束前设置多选框显示的名称和值。操作如下:

1、首先先设置可以进行comobox多选的列,如下所示:

{
                            field : 'jcyj',
                            title : '检测依据',
                            width : 300,
                            sortable : true,
                            align : 'left',
                            formatter : function(value,rowData, index) {
                                return rowData.bzmc;
                            },
                            editor : {
                                type : "combobox",
                                options : {
                                    url : '${pageContext.request.contextPath}/com/rf/gjframe/busBasic/mvc/item/getAllJcbz.do',
                                    method : 'POST',
                                    valueField : 'bzid',
                                    textField : 'bzbh',
                                    missingMessage : '请选择检测标准',
                                    panelHeight : 400,
                                    editable : false,
                                    multiple : true,
                                    required : false
                                }
                            }
                        }

其中,return rowData.bzmc,表示显示的是该字段的值,通常是名称。

2、首选对编辑状态下comobox组件进行扩展:

$.extend($.fn.datagrid.defaults.editors.combobox, {
                getValue : function(jq) {
                    var opts = $(jq).combobox('options');
                    if (opts.multiple) {
                        var values = $(jq).combobox('getValues');
                        if (values.length > 0) {
                            if (values[0] == '' || values[0] == ' ') {
                                return values.join(',').substring(1);//新增的时候会把空白当成一个值了,去掉  
                            }
                        }
                        return values.join(',');
                    } else
                        return $(jq).combobox("getValue");
                }
            });

3、关闭行可编辑状态前设置多选框显示的名称和值:

var bzmc = $('#datagrid').datagrid('getEditor', {
                        index : editIndex,
                        field : 'jcyj'
                    }).target.combobox('getText');
                    var bzValues = $('#datagrid').datagrid('getEditor', {
                        index : editIndex,
                        field : 'jcyj'
                    }).target.combobox('getValues');

var bzids = "";
                    if(bzValues.length > 0){
                        $.each(bzValues,function(index,value){
                            if(value != ""){
                                bzids += value + ",";
                            }
                        });
                        bzids = bzids.substring(0,bzids.lastIndexOf(","));
                    }

$('#datagrid').datagrid('getRows')[editIndex]['bzmc'] = bzmc.substring(1);
                    if(bzids != ""){
                        $('#datagrid').datagrid('getEditor', {
                            index : editIndex,
                            field : 'jcyj'
                        }).target.combobox('setValues',bzids.split(","));
                    }

4、开启行可编辑状态后设置多选框显示的名称和值:

var bzmc = $('#datagrid').datagrid('getRows')[editIndex]['bzmc'];
                    var bzValues = $('#datagrid').datagrid('getEditor', {
                        index : editIndex,
                        field : 'jcyj'
                    }).target.combobox('getValues');
                    var bzids = "";
                    if(bzValues.length > 0){
                        $.each(bzValues,function(index,value){
                            if(value != ""){
                                bzids += value + ",";
                            }
                        });
                        bzids = bzids.substring(0,bzids.lastIndexOf(","));
                    }
                    if(bzids != ""){
                        $('#datagrid').datagrid('getEditor', {
                            index : editIndex,
                            field : 'jcyj'
                        }).target.combobox('setValues',bzids.split(","));
                    }
                    $('#datagrid').datagrid('getEditor', {
                        index : editIndex,
                        field : 'jcyj'
                    }).target.combobox('setText',bzmc);

关于值存储,操作如下:

1、前台传递后台JSON字符串,可使用JSON.stringify($('#datagrid').datagrid('getRows'))传递给后台;

2、后台进行解析和存储。传递过来的JSON字符串转化为JSONArray对象,进行相关操作。

JSONArray Rows = saveRows.getJSONArray("rows");

其中,rows为前台传递给后台的JSON字符串。之后进行遍历及相关操作。

JSONObject object = null;
String jccszj = null;
String selectBzid = "";

for(int i=0;i<rows.size();i++){
                object = rows.getJSONObject(i);
                jccszj = object.getString("jccszj");
                if (StringUtils.isNotNullOrEmpty(object.get("jcyj"))) {
                    selectBzid = object.getString("jcyj");
                    if (jccsBz.containsKey(jccszj)) {
                        String existBzid = jccsBz.get(jccszj);
                        jccsBz.put(jccszj, existBzid + "," + selectBzid);
                    } else {
                        jccsBz.put(jccszj, selectBzid);
                    }
                }
            }
            if(!jccsBz.isEmpty()){
                for (Map.Entry<String, String> entry : jccsBz.entrySet()) {
                    String[] bzids = StringUtils.array_unique(entry.getValue().split(","));
                    for(String id : bzids){
                        // 数据存储操作
                    }
                }
            }

其中,array_unique方法是用来对数组元素进行去重。

/**
     * 数组去重
     * 
     * @param ss
     * @return
     */
    public static String[] array_unique(String[] ss) {
        // array_unique
        List<String> list = new ArrayList<String>();
        for (String s : ss) {
            if (!list.contains(s) && !StringUtils.isEmptyStr(s)) // 或者list.indexOf(s)!=-1
                list.add(s);
        }
        return list.toArray(new String[list.size()]);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值