合并table中别的同列数据lovebet爱博体育官网,GridView达成某列中一样值合并

卷入代码:

1、应用背景:

jQuery.fn.rowspan = function (colIdx) { //封装JQuery同列值相同合并小插件
        return this.each(function () {
            var that;
            $('tr', this).each(function (row) {
                $('td:eq(' + colIdx + ')', this).filter(':visible').each(function (col) {
                    if (that != null && $(this).html() == $(that).html()) {
                        rowspan = $(that).attr("rowSpan");
                        if (rowspan == undefined) {
                            $(that).attr("rowSpan", 1);
                            rowspan = $(that).attr("rowSpan");
                        }
                        rowspan = Number(rowspan) + 1;
                        $(that).attr("rowSpan", rowspan);
                        $(this).hide();
                    } else {
                        that = this;
                    }
                });
            });
        });
    }

  做项目标时候平时会有这种须要,举个例子让您罗列一下兼有职员的专门的学问音讯,须要是首先列列出职员姓名,第一列列出正式新闻,当出现过几个人口会有几个正经音信的时候,第贰列的人手姓名就能重复出现,客户平日会问能或不能把它合并了哟?想Excel表那样多难堪啊?那么些本来能够实现。

  调用情势:

2、完成情势:

$("#ceshi").rowspan(0); //.rowspan(0)从0即第一列开始
  1. 说明

  2纯js写法:

  大家把对行的统一的情势做个包裹,这里会现出两种处境

function hb(){ 
var tab = document.getElementById("subtable"); 
var maxCol = 3, val, count, start; 
var ys=""; 
for(var col = maxCol-1; col >= 0 ; col--) { 
count = 1; 
val = ""; 
for(var i=0; i<tab.rows.length; i++){ 
if(val == tab.rows[i].cells[col].innerHTML){ 
count++; 
}else{ 
if(count > 1){ 
//合并 
start = i - count; 
if(ys=="#00FFFF"){ 
ys="#EEEE00"; 
}else{ 
ys="#00FFFF"; 
} 
tab.rows[start].cells[col].rowSpan = count; 
tab.rows[start].cells[1].style.backgroundColor=ys;//改变颜色 
// ys="#EEEE00"; 
// tab.rows[i].cells[1].style.backgroundColor="#00FFFF";//改变颜色绿色 
for(var j=start+1; j<i; j++){ // 
tab.rows[j].cells[col].style.display = "none"; 
tab.rows[j].removeChild(tab.rows[j].cells[col]); 
} 
count = 1; 
} 
val = tab.rows[i].cells[col].innerHTML; 
} 
} 

if(count > 1 ){ //合并,最后几行相同的情况下 
start = i - count; 
tab.rows[start].cells[col].rowSpan = count; 
for(var j=start+1; j<i; j++) { 
tab.rows[j].removeChild(tab.rows[j].cells[col]); 
} 
} 
} 
} 

    壹)所要合并的列是非模板列

首先种方法,仅用20行代码就可完毕该意义,而且封装在jqCurry面,别的页面能够直接调用。相当于说,其余页面只需1行代码就可实现该意义。即$("#ceshi").rowspan(0); 
比起第一种,第三种方法相比复杂,而且会把tabel里面有着同壹列都合并,不实用。而且要改成仅合并第贰列的话也不太好达成。不过思路能够学习一下。

    二)所要合并的列是模板列 

二.
代码达成:

1)普通列

      /// <summary>
        /// Gridview列的合并(普通列,不包含模板列)
        /// 注意:1.GridView在绑定的时候进行分组和排序,才能让相同的行放在一起
        ///       2.方法应用的时机,应该在Gridview的DataBound事件中使用
        /// </summary>
        /// <param name="gv">需要合并的GridView对象</param>
        /// <param name="columnIndex">所要合并列的索引</param>
        public static void UnitCell(GridView gv, int columnIndex)
        {
            int i = 0;                  //当前行数
            string lastType = string.Empty;        //当前判断是否合并行对应列的值
            int lastCell = 0;           //判断最后一个相同值的行的索引
            if (gv.Rows.Count > 0)
            {
                lastType = gv.Rows[0].Cells[columnIndex].Text.ToString();
                gv.Rows[0].Cells[columnIndex].RowSpan = 1;
                lastCell = 0;
            }
            for (i = 1; i < gv.Rows.Count; i++)
            {
                if (gv.Rows[i].Cells[columnIndex].Text == lastType)
                {
                    gv.Rows[i].Cells[columnIndex].Visible = false;
                    gv.Rows[lastCell].Cells[columnIndex].RowSpan++;
                }
                else
                {
                    lastType = gv.Rows[i].Cells[columnIndex].Text.ToString();
                    lastCell = i;
                    gv.Rows[i].Cells[columnIndex].RowSpan = 1;
                }
            }
        }

2). 模板列:

/// <summary>
        /// Gridview列的合并(模板列)
        /// </summary>
        /// <param name="gv">需要合并的GridView对象</param>
        /// <param name="columnIndex">所要合并列的索引</param>
        /// <param name="lblName">模板列对象的ID</param>
        public static void UnitCell(GridView gv, int columnIndex, string lblName)
        {
            int i = 0;                  //当前行数
            string lastType = string.Empty;        //当前判断是否合并行对应列的值
            int lastCell = 0;           //判断最后一个相同值的行的索引
            if (gv.Rows.Count > 0)
            {
                lastType = (gv.Rows[0].Cells[columnIndex].FindControl(lblName) as Label).Text;
                gv.Rows[0].Cells[columnIndex].RowSpan = 1;
                lastCell = 0;
            }
            for (i = 1; i < gv.Rows.Count; i++)
            {
                if ((gv.Rows[i].Cells[columnIndex].FindControl(lblName) as Label).Text == lastType)
                {
                    gv.Rows[i].Cells[columnIndex].Visible = false;
                    gv.Rows[lastCell].Cells[columnIndex].RowSpan++;
                }
                else
                {
                    lastType = (gv.Rows[i].Cells[columnIndex].FindControl(lblName) as Label).Text.ToString();
                    lastCell = i;
                    gv.Rows[i].Cells[columnIndex].RowSpan = 1;
                }
            }
        }

三). 方法调用:

  方法调用的机会,应该是在GridView的DataBound事件中开展格局的调用。为啥要如此吗?答案异常粗略,大家平日会分页,这样是为了保险你分页之后,约等于页面跳转的也一页时合并还是有效。

相关文章