﻿
/*
 插件名称：jGridViewBar
 主要功能：对生成的GridView进行客户端加工，对指定的列进行分组并归类显示，更多新功能还在开发中
 当前版本号：2.0.0.0
 发布日期：2007/9/19
 
         作者：TNT2   QQ：498977166   Email:szw2003@163.com    www.senparc.com
         
         
         
    参数含义：
        rebulidRowBar(tableCSS , attr) 的参数设置定义如下：
        tableCSS：Table的CSS样式（即GridView的CssClass），字符串型 
        attr：参数设置，Hash型，其中包含了以下参数：
        headShowed：是否显示了GridView的Head ，布尔型
        footShowed：是否显示了GridView的Foot ，布尔型
        checkColum：需要归类的列（从0开始计） ，整数型
        hideCheckColum：是否需要隐藏归类列，布尔型
        barBgcolor：归总栏目的背景色 ，字符串型，可以使用十六进制“#6699ff”格式，或者“red”,“blue”等英文表示
        hideGroup：是否可受起（隐藏）栏目，布尔型
*/

		
function rebulidRowBar(tableCSS , attr){
    var columHTML = "";//目标单元格内容
    var tdTotalInRow = 0 ;//列总数
    var trTotal = $("table."+tableCSS+" tr").size();//总行数
    var trNum = 0;//行计数
    var autoBarNum = 0 ;//自动生成栏目数
    
    //hash参数设定 开始
    var headShowed = attr['headShowed'];
    var footShowed = attr['footShowed'];
    var checkColum = parseInt(attr['checkColum']);
    var hideCheckColum = attr['hideCheckColum'];
    var barBgcolor = attr['barBgcolor'];
    var hideGroup = attr['hideGroup'];
    //hash参数设定 结束
    
//    $("table."+tableCSS).css("width",$("table."+tableCSS).offsetWidth);
    //遍历每一行
    $("table."+tableCSS+" tr").each(function(){

        if( ( headShowed && trNum == 0) || (footShowed && trNum == trTotal -1) )
        {
              //head或foot
              
              if(hideCheckColum)//需要隐藏指定排序列
              {
                  var headORfoot="";
                  //确认标记
                  if(headShowed && trNum == 0)
                  {
                    headORfoot = "th";
                  }
                  else
                  {
                    headORfoot = "td";
                  }
                  
                  //执行隐藏
                  var fheadORfoot_TdCount = 0;
                   $(this).children(headORfoot).each(function(){
                       if(fheadORfoot_TdCount == checkColum)
                       {
                            $(this).hide();
                       }
                       fheadORfoot_TdCount++;
                   });
               }
        }
        else
        {
            if($(this).children("td").size() > tdTotalInRow)
            {
               tdTotalInRow = $(this).children("td").size();//一行内的单元格数
            }
            
            var tdNum = 0;//单元格计数      
            
            //遍历每一个单元格
            $(this).children("td").each(function(){
                if(tdNum == checkColum)
                {
                    var newColum = $(this).find("span").html();
                    if( columHTML != newColum)
                    {
                        columHTML = newColum;
                        autoBarNum++;
                        var barHTML= "";

                        var onclickHTML = "onclick=\"switchdivAutoBar('" + tableCSS + "','" + autoBarNum +"');\" ";//onclick事件
                        var styleHTML = (hideGroup) ? "style=\"cursor:hand;\" " : "" ;//style样式 | 判断是否隐藏组（显示手型鼠标）
                        barHTML += "<tr " + onclickHTML + styleHTML + " bgcolor=\"" + barBgcolor + "\"><td align=\"left\" colspan=" + tdTotalInRow + "> <b>" + columHTML + "</b> 组</td></tr>";
           
                        $(this).parent().before(barHTML);//添加自动生成的标题栏

                    }
                    
                        //隐藏单元格
                    if(hideCheckColum)//需要隐藏指定排序列单元格
                    {
                       $(this).hide();
                    }
                }
                tdNum++;//单元格计数
            });
            
            //添加CSS样式标记
            if(hideGroup)
            {
               $(this).addClass("divAutoBar_" + tableCSS +  autoBarNum);
            }
        }
        
        trNum++;//行计数
    });
}

//开关/自动生成的标题栏
function switchdivAutoBar(tableCSS , autoBarNum)
{
    $(".divAutoBar_" + tableCSS + autoBarNum).toggle();
}


/*
更新记录

V1.2.0.0.
完整版（开源，供研究探讨用）：jquery.gridviewbar-1.2.0.0.js 
压缩版（加密并压缩，1/3的体积，供网上实际使用）：jquery.gridviewbar-pack-1.2.0.0.js 

发布日期：2007/9/20

更新记录:
为了适应更多参数的需要，把一些属性都归入了hash型的参数，这样扩展性就大大增强了
同时增加了一些功能：
·用户可自行设定是否隐藏指定排序列
·用户可自行设定归总栏目的背景色（陆续还会有前景色等设置项目推出）
·用户可自行设定是否可以收起（隐藏）栏目，像QQ用户组那样


2007/9/19 V1.1.0.0
对“指定分类”列进行了隐藏，保证美观和一定的灵活性
修正了当Foot显示时,不能正常隐藏的bug



2007/9/19 V1.0.0.0  
对ASP.NET 的 GridView 指定列进行分类，并可以单独“开/关”（有点像QQ中用户组的效果）

*/