请教easyui的datagrid控件根据条件合并单元格

Yvonnebai 2016-07-27 03:16:26
刚刚接触easyui,目前遇到个问题想来请教,多组json数据形如:

{
"total": 4,
"rows": [
{
"id": "K01",
"name": "P",
"type": "N",
"n1": 36.5,
"n2": "Large",
"n3": "EST-1",
"n4": "r"
},
{
"id": "K01",
"name": "P",
"type": "N",
"n1": 36.5,
"n2": "Large",
"n3": "EST-1",
"n4": "r"
},
{
"id": "K9",
"name": "Dalmation",
"type": 12,
"n1": 36.5,
"n2": "Spotted Adult Female",
"n3": "EST-10",
"n4": "123321"
},
{
"id": "K9",
"name": "Dalmation",
"type": 12,
"n1": 36.5,
"n2": "Spotte Adult Female",
"n3": "EST-10",
"n4": "123321"
}
]
}


我需要把数据按照id字段分组合并单元格 id,name,type,n1,我试过扩展的autoMergeCells合并单元格方法,这个方法的问题是根据单元格内容是否相同来合并的,可这么合并在我的需求里会发生不是同一组的单元格也会合并到一起
就像这样

我想得到的效果是这样

要怎么实现呀?我在尝试修改autoMergeCells扩展程序,求各位指点下
单元格自动扩展插件如下:

$.extend($.fn.datagrid.methods, {
autoMergeCells : function (jq, fields) {
return jq.each(function () {
var target = $(this);
if (!fields) {
fields = target.datagrid("getColumnFields");
}
var rows = target.datagrid("getRows");
var i = 0,
j = 0,
temp = {};
for (i; i < rows.length; i++) {
var row = rows[i];
j = 0;
for (j; j < fields.length; j++) {
var field = fields[j];
var tf = temp[field];
if (!tf) {
tf = temp[field] = {};
tf[row[field]] = [i];
} else {
var tfv = tf[row[field]];
if (tfv) {
tfv.push(i);
} else {
tfv = tf[row[field]] = [i];
}
}
}
}
$.each(temp, function (field, colunm) {
$.each(colunm, function () {
var group = this;

if (group.length > 1) {
var before,
after,
megerIndex = group[0];
for (var i = 0; i < group.length; i++) {
before = group[i];
after = group[i + 1];
if (after && (after - before) == 1) {
continue;
}
var rowspan = before - megerIndex + 1;
if (rowspan > 1) {
target.datagrid('mergeCells', {
index : megerIndex,
field : field,
rowspan : rowspan
});
}
if (after && (after - before) != 1) {
megerIndex = after;
}
}
}
});
});
});
}
});
...全文
310 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏夜星雨 2017-12-02
  • 打赏
  • 举报
回复
假如要根据某一列的相等条件来合并多个列那就这样来: 在datagrid的初始化脚本里加上下面代码(datagrid的ID和field根据自己的代码修改) onLoadSuccess(data) { var mark = 1; for (var i = 1; i < data.rows.length; i++) { if (data.rows[i]['Story'] == data.rows[i - 1]['Story']) { mark += 1; $("#datag").datagrid('mergeCells', { index: i + 1 - mark, field: 'Story', rowspan: mark }); $("#datag").datagrid('mergeCells', { index: i + 1 - mark, field: 'User', rowspan: mark }); $("#datag").datagrid('mergeCells', { index: i + 1 - mark, field: 'Start', rowspan: mark }); } else { mark = 1; } } } 同样条件里也可以用两个甚至多个列作为条件。
小小玲112 2017-05-02
  • 打赏
  • 举报
回复
复制了你的代码没实现,请问下你最后是怎么实现的?
Yvonnebai 2016-07-27
  • 打赏
  • 举报
回复
重新再网上找了个合并单元格代码修改了下问题就解决了,暂时没发现问题,请各位指导下

function MergeCells(tableID, fldList) {
    var Arr = fldList.split(",");
    var dg = $('#' + tableID);
    var fldName;
    var RowCount = dg.datagrid("getRows").length;
    var span;
    var PerValue = "";
    var CurValue = "";
    var length = Arr.length - 1;
    var rows = dg.datagrid("getRows");

    for (i = length; i >= 0; i--) {
        fldName = Arr[i];
        PerValue = "";
        span = 1;
        for (row = 0; row <= RowCount; row++) {
            if (row == RowCount) {
                CurValue = "";
            }
            else {
                CurValue = dg.datagrid("getRows")[row][fldName];
            }
            //同组信息合并单元格,添加限制条件
            if (PerValue == CurValue &&rows[row-1]&&rows[row]["id"] == rows[row - 1]["id"])
             {
                span += 1;
            }
            else {
                var index = row - span;
                dg.datagrid('mergeCells', {
                    index: index,
                    field: fldName,
                    rowspan: span,
                    colspan: null
                });
                span = 1;
                PerValue = CurValue;
            }
        }
    }
}

87,902

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧