原始的DataGrid

合并后的datagrid

实现js脚本

合并后的datagrid

实现js脚本
function fcnAthosTableMerge(strTableName)
{
//可以多次调用 fcnAthosColumnMerge 函数,但是合并的列要按照从右到左的顺序调用
fcnAthosColumnMerge(strTableName, [1], [1], true, true, false);
fcnAthosColumnMerge(strTableName, [0], [0], true, true, false);
}
/*
strGirdId ,要合并的表格的ID
arrIndexCol ,表示依据第几列的值,来合并(如第一列的值就相同)
arrMergeCol ,表示,如果列arrIndexCol的值相同,就合并 arrMergeCol列的值
blHasHeader ,表示是否显示Header
blHasFooter ,表示是否显示Footer
blHasPageLine ,表示
*/
function fcnAthosColumnMerge(strGridId, arrIndexCol, arrMergeCol, blHasHeader, blHasFooter, blHasPageLine)
{
var tbl = document.all[strGridId];
var iH = 0;
var iF = 0;
if(blHasHeader == true) iH++;
if(blHasFooter == true) iF++;
if(blHasPageLine == true) iF++;
tRows = tbl.children[0].children;
i0 = iH;
strKey = new Array(arrIndexCol.length);
strPrevKey = new Array(arrIndexCol.length);
for(ii=0; ii<arrIndexCol.length;ii++)
{
strKey[ii] = tRows[iH].children[arrIndexCol[ii]].innerText;
strPrevKey[ii] = strKey[ii];
}
for(i=iH+1;i<tRows.length-iF;i++)
{
blEqual = true;
for(ii=0; ii<arrIndexCol.length;ii++)
{
strKey[ii] = tRows[i].children[arrIndexCol[ii]].innerText;
if(strKey[ii] != strPrevKey[ii])
blEqual = false;
}
if(blEqual == false)
{
for(ii=0;ii<arrMergeCol.length;ii++)
tRows[i0].children[arrMergeCol[ii]].rowSpan = i-i0;
for( j=i0+1; j<i; j++)
for(ii=arrMergeCol.length-1;ii>=0;ii--)
tRows[j].children[arrMergeCol[ii]].removeNode(true);
i0 = i;
for(ii=0;ii<strKey.length;ii++)
strPrevKey[ii] = strKey[ii];
}
}
for(ii=0;ii<arrMergeCol.length;ii++)
tRows[i0].children[arrMergeCol[ii]].rowSpan = i-i0;
for( j=i0+1; j<i; j++)
for(ii=arrMergeCol.length-1;ii>=0;ii--)
tRows[j].children[arrMergeCol[ii]].removeNode(true);
return;
}
<body MS_POSITIONING="GridLayout" onload="fcnAthosTableMerge('DataGrid1')">
{
//可以多次调用 fcnAthosColumnMerge 函数,但是合并的列要按照从右到左的顺序调用
fcnAthosColumnMerge(strTableName, [1], [1], true, true, false);
fcnAthosColumnMerge(strTableName, [0], [0], true, true, false);
}
/*
strGirdId ,要合并的表格的ID
arrIndexCol ,表示依据第几列的值,来合并(如第一列的值就相同)
arrMergeCol ,表示,如果列arrIndexCol的值相同,就合并 arrMergeCol列的值
blHasHeader ,表示是否显示Header
blHasFooter ,表示是否显示Footer
blHasPageLine ,表示
*/
function fcnAthosColumnMerge(strGridId, arrIndexCol, arrMergeCol, blHasHeader, blHasFooter, blHasPageLine)
{
var tbl = document.all[strGridId];
var iH = 0;
var iF = 0;
if(blHasHeader == true) iH++;
if(blHasFooter == true) iF++;
if(blHasPageLine == true) iF++;
tRows = tbl.children[0].children;
i0 = iH;
strKey = new Array(arrIndexCol.length);
strPrevKey = new Array(arrIndexCol.length);
for(ii=0; ii<arrIndexCol.length;ii++)
{
strKey[ii] = tRows[iH].children[arrIndexCol[ii]].innerText;
strPrevKey[ii] = strKey[ii];
}
for(i=iH+1;i<tRows.length-iF;i++)
{
blEqual = true;
for(ii=0; ii<arrIndexCol.length;ii++)
{
strKey[ii] = tRows[i].children[arrIndexCol[ii]].innerText;
if(strKey[ii] != strPrevKey[ii])
blEqual = false;
}
if(blEqual == false)
{
for(ii=0;ii<arrMergeCol.length;ii++)
tRows[i0].children[arrMergeCol[ii]].rowSpan = i-i0;
for( j=i0+1; j<i; j++)
for(ii=arrMergeCol.length-1;ii>=0;ii--)
tRows[j].children[arrMergeCol[ii]].removeNode(true);
i0 = i;
for(ii=0;ii<strKey.length;ii++)
strPrevKey[ii] = strKey[ii];
}
}
for(ii=0;ii<arrMergeCol.length;ii++)
tRows[i0].children[arrMergeCol[ii]].rowSpan = i-i0;
for( j=i0+1; j<i; j++)
for(ii=arrMergeCol.length-1;ii>=0;ii--)
tRows[j].children[arrMergeCol[ii]].removeNode(true);
return;
}
<body MS_POSITIONING="GridLayout" onload="fcnAthosTableMerge('DataGrid1')">
浙公网安备 33010602011771号