效果如下图:
主要有两处合并,一是复选框向下合并,二是第2行“说明”向右合并,简而言之就是两行显示一条内容。
// easyui版本1.8.1
$(selector).datagrid({
url:url,
//......
//其他属性设置略过
//......
,columns : [[ // 列设置
{field:'id',checkbox:true} //这一列需要向下合并
,{field:'title',title:'规则',width:200,formatter:function(v,r,i){
return i%2 == 0 ? r.title : r.remark; // 如果当前行是第1行,显示title字段,
// 如果当前行是第2行,显示remark字段,第2行remark字段向左合并
}}
,loadFilter : function(data){
var row = [];
for(var i=0;i<data.data.length;i++){ // 整理数据源
row.push(data.data[i]);
row.push(data.data[i]); //复制一行变成1,1,2,2,3,3
}
return {
total : data.total
,rows : row
}
}
,onLoadSuccess : function(data){ //加载完成回调
var cell = $(this);
$.each(data.rows,function(i,n){
if(i%2 === 0){ // 每2行为一组设置合并单元格
cell.datagrid('mergeCells',{
index : i
,field : 'id'
,rowspan : 2 // 我的第一列是checkbox,所以设置向下合并单元格,垂直合并两行
});
cell.datagrid('mergeCells',{
index : i+1 //行索+1,指向一组的第二行
,field : 'title' //合并行的起点,横向合并是从左向右合并
,colspan : 7 //横向合并的格子数量
});
}
});
}
,onSelect : function(i,row){
if(i%2 == 1) {
$(this).datagrid('selectRow',i-1); //点击选择了组的第2行的话自动跳到第1行
}
}
});
/*
原理:title字段连续显示2行,在第2行设置横向合并,同时使用formatter函数替换为显示remark字段
关键点:需要设置横向的字段不能设置为列字段,一旦设置,怎么搞都不行的
*/