博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GridView实现某列中相同值合并(不规则表)
阅读量:6253 次
发布时间:2019-06-22

本文共 2782 字,大约阅读时间需要 9 分钟。

 

 

 

一、应用背景:

  做项目的时候经常会有这种需求,比如让你罗列一下所有人员的专业信息,要求是第一列列出人员姓名,第二列列出专业信息,当出现很多人员会有多个专业信息的时候,第一列的人员姓名就会重复出现,客户经常会问能不能把它合并了啊?想Excel表那样多好看啊?这个当然可以实现。

二、实现方法:

1. 说明

  我们把对行的合并的方法做个封装,这里会出现两种情况

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

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

2. 代码实现:

1)普通列

 

      ///         /// Gridview列的合并(普通列,不包含模板列)        /// 注意:1.GridView在绑定的时候进行分组和排序,才能让相同的行放在一起        ///       2.方法应用的时机,应该在Gridview的DataBound事件中使用        ///         /// 需要合并的GridView对象        /// 所要合并列的索引        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). 模板列:

///         /// Gridview列的合并(模板列)        ///         /// 需要合并的GridView对象        /// 所要合并列的索引        /// 模板列对象的ID        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;                }            }        }

 

3). 方法调用:

  方法调用的时机,应该是在GridView的DataBound事件中进行方法的调用。为什么要这样呢?答案很简单,我们经常会分页,这样是为了保证你分页之后,也就是页面跳转的也一页时合并仍然有效。

转载地址:http://btjsa.baihongyu.com/

你可能感兴趣的文章
异常处理汇总 ~ 修正果带着你的Code飞奔吧!
查看>>
百度地图需要的效果-有感
查看>>
BZOJ 1853: [Scoi2010]幸运数字
查看>>
BFS --- 素数环
查看>>
PCIE_DMA:xapp1052学习笔记
查看>>
给报表增加页眉
查看>>
python ----字符串基础练习题30道
查看>>
K 班1-7,alpha,beta 作业成绩汇总
查看>>
uva-10879-因数分解
查看>>
python 调用aiohttp
查看>>
Spring Boot中使用MyBatis注解配置详解
查看>>
linux下文件的一些文件颜色的含义
查看>>
跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
查看>>
基于WinDbg的内存泄漏分析
查看>>
如何花更少的时间学习更多的知识
查看>>
学习鸟哥的Linux私房菜笔记(8)——文件查找与文件管理2
查看>>
day04 列表 增删改查 元组 range
查看>>
PL/SQL查看表结构
查看>>
升级fedora 18到fedora 19
查看>>
easyui combobox两种不同的数据加载方式
查看>>