/**
* wujian
* 合并单元格()
* @param {} grid 要合并单元格的grid对象
* @param {} main_col 主参考合并列
* @param {} ref_cols 副参考合并列:为一个数组(如:[2,4,5])
*/
mergeCells : function(grid,main_col,ref_cols){
var arrayTr=document.getElementById(grid.getId()+"-body").firstChild.firstChild.getElementsByTagName('tr');
var trCount = arrayTr.length;
var arrayTd;
var nullDivText = '<div class="FF0000 border:0px;"></div>';
var nullBotton = 'border-bottom: #ededed 0px solid;';
var nullTop = 'border-top:#ededed 0px solid;';
var nullTopBotton = 'border-top:#ededed 0px solid;border-bottom: #ededed 0px solid;';
var mergeObjects = [];
var merge = function(rowspanObj,isMerge){ //定义合并函数
if(rowspanObj.rowspan>1){
if(isMerge) mergeObjects.push(rowspanObj);
Ext.each(rowspanObj,function(obj){
for(var i=0;i<obj.rowspan;i++){
if((obj.tr+i)<trCount){
if(i==0){//设置首行
var firstTd = arrayTr[obj.tr].getElementsByTagName("td");
firstTd[obj.td-1].style.cssText=nullBotton;
if(obj.rowspan>2)
firstTd[obj.td-1].innerHTML = nullDivText;
}else if(i==(Math.round(obj.rowspan/2-1))){//设置居中
var firstTd = arrayTr[obj.tr+i].getElementsByTagName("td");
firstTd[obj.td-1].style.cssText=nullTopBotton;
}else if(i==(obj.rowspan-1)){//设置最后一行
var lastTd = arrayTr[obj.tr+i].getElementsByTagName("td");
lastTd[obj.td-1].innerHTML = nullDivText;
lastTd[obj.td-1].style.cssText=nullTop;
}else{
arrayTd = arrayTr[obj.tr+i].getElementsByTagName("td");
arrayTd[obj.td-1].innerHTML = nullDivText;
arrayTd[obj.td-1].style.cssText=nullTopBotton;
}
}
}
});
}else{
var firstTd = arrayTr[rowspanObj.tr].getElementsByTagName("td");
firstTd[rowspanObj.td-1].style.cssText=nullDivText;
}
};
var spanRows = function(strTr,cols,trCount,isMerge){
var rowspanObj = {}; //要进行跨列操作的td对象{tr:1,td:2,rowspan:5}
var col;
Ext.each(cols,function(colIndex){ //逐列去操作tr
var rowspan = 1;
var divHtml = null;//单元格内的数值
for(var i=strTr;i<trCount;i++){ //i=0表示表头等没用的行
arrayTd = arrayTr[i].getElementsByTagName("td");
for(var j=1;j<arrayTd.length;j++){
arrayTd[j].style.css='x-grid-cell';
}
var cold=0;
col=colIndex+cold;//跳过RowNumber列和check列
if(!divHtml){
divHtml = arrayTd[col-1].innerHTML;
rowspanObj = {tr:i,td:col,rowspan:rowspan};
}else{
var cellText = arrayTd[col-1].innerHTML;
var addf=function(){
rowspanObj["rowspan"] = rowspanObj["rowspan"]+1; //合并一行
if(i==trCount-1){
merge(rowspanObj,isMerge);//执行合并函数
}
};
var mergef=function(){
merge(rowspanObj,isMerge);//执行合并函数
divHtml = cellText;
rowspanObj = {tr:i,td:col,rowspan:rowspan};
};
if(cellText == divHtml){addf();}else{mergef();}
}
}
});
};
//合并第一列
spanRows(0,main_col,trCount,true);
//合并相邻列
if(ref_cols)
mergeObjects.forEach(function(rowspanObj){
spanRows(rowspanObj['tr'],ref_cols,rowspanObj['tr']+rowspanObj['rowspan'],false);
});
}
* wujian
* 合并单元格()
* @param {} grid 要合并单元格的grid对象
* @param {} main_col 主参考合并列
* @param {} ref_cols 副参考合并列:为一个数组(如:[2,4,5])
*/
mergeCells : function(grid,main_col,ref_cols){
var arrayTr=document.getElementById(grid.getId()+"-body").firstChild.firstChild.getElementsByTagName('tr');
var trCount = arrayTr.length;
var arrayTd;
var nullDivText = '<div class="FF0000 border:0px;"></div>';
var nullBotton = 'border-bottom: #ededed 0px solid;';
var nullTop = 'border-top:#ededed 0px solid;';
var nullTopBotton = 'border-top:#ededed 0px solid;border-bottom: #ededed 0px solid;';
var mergeObjects = [];
var merge = function(rowspanObj,isMerge){ //定义合并函数
if(rowspanObj.rowspan>1){
if(isMerge) mergeObjects.push(rowspanObj);
Ext.each(rowspanObj,function(obj){
for(var i=0;i<obj.rowspan;i++){
if((obj.tr+i)<trCount){
if(i==0){//设置首行
var firstTd = arrayTr[obj.tr].getElementsByTagName("td");
firstTd[obj.td-1].style.cssText=nullBotton;
if(obj.rowspan>2)
firstTd[obj.td-1].innerHTML = nullDivText;
}else if(i==(Math.round(obj.rowspan/2-1))){//设置居中
var firstTd = arrayTr[obj.tr+i].getElementsByTagName("td");
firstTd[obj.td-1].style.cssText=nullTopBotton;
}else if(i==(obj.rowspan-1)){//设置最后一行
var lastTd = arrayTr[obj.tr+i].getElementsByTagName("td");
lastTd[obj.td-1].innerHTML = nullDivText;
lastTd[obj.td-1].style.cssText=nullTop;
}else{
arrayTd = arrayTr[obj.tr+i].getElementsByTagName("td");
arrayTd[obj.td-1].innerHTML = nullDivText;
arrayTd[obj.td-1].style.cssText=nullTopBotton;
}
}
}
});
}else{
var firstTd = arrayTr[rowspanObj.tr].getElementsByTagName("td");
firstTd[rowspanObj.td-1].style.cssText=nullDivText;
}
};
var spanRows = function(strTr,cols,trCount,isMerge){
var rowspanObj = {}; //要进行跨列操作的td对象{tr:1,td:2,rowspan:5}
var col;
Ext.each(cols,function(colIndex){ //逐列去操作tr
var rowspan = 1;
var divHtml = null;//单元格内的数值
for(var i=strTr;i<trCount;i++){ //i=0表示表头等没用的行
arrayTd = arrayTr[i].getElementsByTagName("td");
for(var j=1;j<arrayTd.length;j++){
arrayTd[j].style.css='x-grid-cell';
}
var cold=0;
col=colIndex+cold;//跳过RowNumber列和check列
if(!divHtml){
divHtml = arrayTd[col-1].innerHTML;
rowspanObj = {tr:i,td:col,rowspan:rowspan};
}else{
var cellText = arrayTd[col-1].innerHTML;
var addf=function(){
rowspanObj["rowspan"] = rowspanObj["rowspan"]+1; //合并一行
if(i==trCount-1){
merge(rowspanObj,isMerge);//执行合并函数
}
};
var mergef=function(){
merge(rowspanObj,isMerge);//执行合并函数
divHtml = cellText;
rowspanObj = {tr:i,td:col,rowspan:rowspan};
};
if(cellText == divHtml){addf();}else{mergef();}
}
}
});
};
//合并第一列
spanRows(0,main_col,trCount,true);
//合并相邻列
if(ref_cols)
mergeObjects.forEach(function(rowspanObj){
spanRows(rowspanObj['tr'],ref_cols,rowspanObj['tr']+rowspanObj['rowspan'],false);
});
}