在DataGrid 的onLoadSuccess事件中调用合并方法
onLoadSuccess: function (data) {
if (data.rows.length > 0) {
//调用mergeCellsByField()合并单元格
mergeCellsByField("tb", "列名1,列名2"); //第一个参数为表格的id 第二个参数为合并列名 可为多列 用','分割
}
},
//合并方法
function mergeCellsByField(tableID, colList) {
var ColArray = colList.split(",");
var tTable = $("#" + tableID);
var TableRowCnts = tTable.datagrid("getRows").length;
var tmpA;
var tmpB;
var PerTxt = "";
var CurTxt = "";
var alertStr = "";
for (j = ColArray.length - 1; j >= 0; j--) {
PerTxt = "";
tmpA = 1;
tmpB = 0;
for (i = 0; i <= TableRowCnts; i++) {
if (i == TableRowCnts) {
CurTxt = "";
}
else {
CurTxt = tTable.datagrid("getRows")[i][ColArray[j]];
}
if (PerTxt == CurTxt) {
tmpA += 1;
}
else {
tmpB += tmpA;
tTable.datagrid("mergeCells", {
index: i - tmpA,
field: ColArray[j], //合并字段
rowspan: tmpA
});
/*tTable.datagrid("mergeCells", { //根据ColArray[j]进行合并
index: i - tmpA,
field: "spOrgIdStr",
rowspan: tmpA
});
*/
tmpA = 1;
}
PerTxt = CurTxt;
}
}
}
经测试验证上述方法存在一定漏洞,比如只要上下列相同就会合并,完全不考虑前面列是否存在限制条件。。
遂做出如下修改
//datagrid 合并列 根据某列的限制
function mergeFieldByField(tableID, arr) {
var dg = $("#" + tableID); //要合并的datagrid中的表格id
var rowCount = dg.datagrid("getRows").length;
var cellName;
var span;
var perValue = "";
var curValue = "";
var perCondition="";
var curCondition="";
var flag=true;
var condiName="";
var length = arr.length - 1;
for (i = length; i >= 0; i--) {
cellName = arr[i].mergeFiled;
condiName=arr[i].premiseFiled;
if(condiName != null){
flag=false;
}
perValue = "";
perCondition="";
span = 1;
for (row = 0; row <= rowCount; row++) {
if (row == rowCount) {
curValue = "";
curCondition="";
} else {
curValue = dg.datagrid("getRows")[row][cellName];
/* if(cellName=="ORGSTARTTIME"){//特殊处理这个时间字段
curValue =formatDate(dg.datagrid("getRows")[row][cellName],"");
} */
if(!flag){
curCondition=dg.datagrid("getRows")[row][condiName];
}
}
if (perValue == curValue&&(flag||perCondition==curCondition)) {
span += 1;
} else {
var index = row - span;
dg.datagrid('mergeCells', {
index : index,
field : cellName,
rowspan : span,
colspan : null
});
span = 1;
perValue = curValue;
if(!flag){
perCondition=curCondition;
}
}
}
}
}
调用方法
onLoadSuccess: function (data) {
if (data.rows.length > 0) {
var colArray = new Array();
colArray.push('{mergeFiled:"VC_DATE",premiseFiled:"PERSONSTR"}'); //以日期作为限制合并人员
mergeFieldByField("jxTable", eval('(['+colArray.join(',')+'])'));
}
}