zoukankan      html  css  js  c++  java
  • GridView多行多列合并单元格(指定列合并)

    上周写了一篇GridView多行多列合并单元格(完整代码和例子),实现的方法有很多不足之处,比如只能合并连续的列,不支持模板列。在今天的文章里,首先来解决第一个不足。

    解决这个问题的思路并不难,现有的代码已经解决了连续列的合并,合并指定的列只需将要合并的列按照顺序传递给合并的方法,就OK了!下面我给出合并指定列的代码:

       1:  /// <summary>
       2:  /// 合并GridView单元格
       3:  /// </summary>
       4:  /// <param name="gv">要合并的GridView</param>
       5:  /// <param name="cols">指定的列,要按照顺序传入</param>
       6:  public static void MergeRow(GridView gv, params int[] cols)
       7:  {
       8:      RowArg init = new RowArg()
       9:      {
      10:          StartRowIndex = 0,
      11:          EndRowIndex = gv.Rows.Count - 2
      12:      };
      13:      for (int i = 0; i < cols.Length; i++)
      14:      {
      15:          if (i > 0)
      16:          {
      17:              List<RowArg> list = new List<RowArg>();
      18:              //从第二列开始就要遍历前一列
      19:              TraversesPrevCol(gv, cols[i - 1], list);
      20:              foreach (var item in list)
      21:              {
      22:                  MergeRow(gv, cols[i], item.StartRowIndex, item.EndRowIndex);
      23:              }
      24:          }
      25:          //合并开始列的行
      26:          else
      27:          {
      28:              MergeRow(gv, i, init.StartRowIndex, init.EndRowIndex);
      29:          }
      30:      }
      31:  }

    上一篇文章最后,我写了一个简单的例子,在这个例子中,如下图(左边)所示,合并了前四列,第一列是张三,第二列是张三的工资项:应发工资和五险一金,第三列分别是应发工资的子项:基本工资、奖金和加班,五险一金的子项:医疗保险和住房公积金。第四列基本工资:1月,奖金:1月,加班:1月… 正常来说,第四列都是1月的,应该都合并成一块。使用连续列合并的方法完成这个问题,可以将列的顺序进行调整,但是现在要求不能调整列的顺序,那么就只能按照指定列合并了。

    www.tnmblogs.com

    完成上图中间的合并格式,只需在GridView绑定了数据之后,调用本文开始的方法,传入列的顺序0,1,3,2,完成右边图的合并格式,只需传入列的顺序0,3,1,2。

       1:  //左边图
       2:  MergeGridViewCell.MergeRow(Gridview1, 0, 3);
       3:  //中间图
       4:  MergeGridViewCell.MergeRow(Gridview1, 0, 1, 3, 2);
       5:  //右边图
       6:  MergeGridViewCell.MergeRow(Gridview1, 0, 3, 1, 2);

    最后说明一下,本篇文章是在上一篇文章的基础上完成的,如果对此感兴趣的,可以先阅读上一篇文章,最后附上本篇文章的源码:http://pan.baidu.com/share/link?shareid=87931&uk=2466437167


    作者:田念明
    出处http://www.cnblogs.com/nianming/
    个人网站:http://www.tnmblogs.com欢迎访问 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    短链设计
    .NET Core .NET标准REST库Refit
    .net core 实现动态 Web API
    Visual Studio 2013 Web开发
    .Net 跨平台可移植类库PCL可用于任何平台包括Mono
    Jexus 支持PHP的三种方式
    单元测试模拟框架:Nsubstitute
    开发便于运维的Windows服务
    搭建Linux+Jexus+MariaDB+ASP.NET[LJMA]环境
    在Linux和Windows平台上操作MemoryMappedFile(简称MMF)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2732008.html
Copyright © 2011-2022 走看看