胖在一方

出得厅堂入得厨房的胖子

导航

Hierarchy Datagrid 解决方案

Posted on 2006-09-12 16:46  胖在一方  阅读(238)  评论(0)    收藏  举报
原始的DataGrid 

合并后的datagrid


实现js脚本

  function fcnAthosTableMerge(strTableName)
  {
  //可以多次调用 fcnAthosColumnMerge 函数,但是合并的列要按照从右到左的顺序调用
  fcnAthosColumnMerge(strTableName, [1], [1], truetruefalse);
  fcnAthosColumnMerge(strTableName, [0], [0], truetruefalse);
  }
  
  /*
  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')">