话不多说,直接上干货。
行编辑使用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()]);
}