当前位置: 首页 > article >正文

WPF合并C1FlexGrid表格,根据多列的值进行合并

        在cs文件种写入

public PcbScrapListUC()
        {
            InitializeComponent();
            VmType = typeof(PcbScrapListVM);

//合并
            PcbScrapFlexGrid.MergeManager = new SummaryProjectMergeManager();
        }

private class SummaryProjectMergeManager : IMergeManager
        {
            /// <summary>
            /// 获取合并块
            /// </summary>
            /// <param name="grid"></param>
            /// <param name="cellType"></param>
            /// <param name="rg"></param>
            /// <returns></returns>
            public CellRange GetMergedRange(C1FlexGrid grid, CellType cellType, CellRange rg)
            {
                var colName = grid.Columns[rg.Column].ColumnName;
                if (cellType != CellType.Cell)
                {
                    return rg;
                }

                switch (colName)//要合并的列
                {
                    case "CustomerCodes":
                        return SetRg(grid, rg, new List<string>() { colName, "ProductNumberVer" });
                    case "ScrapPcsCount":
                        return SetRg(grid, rg, new List<string>() { colName, "ProductNumberVer" });
                    case "ProductNumberVer":
                        return SetRg(grid, rg, new List<string>() { colName });
                    case "RiskName":

// 根据哪些列合并,这里是所有列都需要加上ProductNumberVer  colName, "ProductNumberVer"
                        return SetRg(grid, rg, new List<string>() { colName, "ProductNumberVer" });
                    case "TopRate":
                        return SetRg(grid, rg, new List<string>() { colName, "ProductNumberVer" });
                    case "StockInPcsAreaNet":
                        return SetRg(grid, rg, new List<string>() { colName, "ProductNumberVer" });
                    case "StockInPcsCount":
                        return SetRg(grid, rg, new List<string>() { colName, "ProductNumberVer" });
                    case "PcbTypeName":
                        return SetRg(grid, rg, new List<string>() { colName, "ProductNumberVer" });
                    case "ProductNumberTypeName":
                        return SetRg(grid, rg, new List<string>() { colName, "ProductNumberVer" });
                    case "ScrapAreaNetCount":
                        return SetRg(grid, rg, new List<string>() { colName, "ProductNumberVer" });
                    case "ScrapRate":
                        return SetRg(grid, rg, new List<string>() { colName, "ProductNumberVer" });
                    // case "item2":
                    // return SetGeCg(grid, rg, new List<string>() { colName });

                    default:
                        return rg;
                }
            }

            /// <summary>
            /// 设置合并块
            /// </summary>
            /// <param name="grid"></param>
            /// <param name="rg"></param>
            /// <param name="depColList">合并依据列</param>
            /// <returns></returns>
            private CellRange SetRg(C1FlexGrid grid, CellRange rg, List<string> depColList)
            {
                for (int i = rg.Row; i < grid.Rows.Count - 1; i++)
                {
                    bool isSame = true;
                    foreach (var depCol in depColList)
                    {
                        if (GetDataDisplay(grid, i, grid.Columns[depCol].Index) != GetDataDisplay(grid, i + 1, grid.Columns[depCol].Index))
                        {
                            isSame = false;
                            break;
                        }
                    }
                    if (!isSame)
                    {
                        break;
                    }
                    rg.Row2 = i + 1;
                }
                for (int i = rg.Row; i > 0; i--)
                {
                    bool isSame = true;
                    foreach (var depCol in depColList)
                    {
                        if (GetDataDisplay(grid, i, grid.Columns[depCol].Index) != GetDataDisplay(grid, i - 1, grid.Columns[depCol].Index))
                        {
                            isSame = false;
                            break;
                        }
                    }
                    if (!isSame)
                    {
                        break;
                    }
                    rg.Row = i - 1;
                }
                return rg;
            }
            private CellRange SetGeCg(C1FlexGrid grid, CellRange rg, List<string> depColList)
            {
                for (int i = rg.Row; i < grid.Rows.Count - 1; i++)
                {
                    if (i == 6)
                    {
                        grid[6, 6] = null;
                        grid[6, 7] = null;
                        grid[6, 8] = null;
                        grid.Rows[i].AllowMerging = true;
                        break;
                    }
                }
                return rg;
            }
            /// <summary>
            /// 获取单元格显示值
            /// </summary>
            /// <param name="grid"></param>
            /// <param name="r"></param>
            /// <param name="c"></param>
            /// <returns></returns>
            private string GetDataDisplay(C1FlexGrid grid, int r, int c)
            {
                return (grid[r, c] ?? "").ToString();
            }
        }

效果:所有列都根据本厂编号加单前列合并

如果只是合并当前一列,就无需传多个字段


http://www.kler.cn/a/461108.html

相关文章:

  • 46. Three.js案例-创建颜色不断变化的立方体模型
  • 【51单片机零基础-chapter6:LCD1602调试工具】
  • Spring源码分析之事件机制——观察者模式(三)
  • liunx下载gitlab
  • 机器学习-感知机-神经网络-激活函数-正反向传播-梯度消失-dropout
  • 【玩转OCR | 基于腾讯云智能结构化OCR的技术应用实践】
  • JavaWeb开发(二)IDEA创建Java Web项目并部署及目录结构
  • Applied Spatial Statistics(十三)带有空间平滑器的 GAM
  • 批量新建工作表,带个性化模板一步到位-Excel易用宝
  • 12.29~12.31[net][review]need to recite[part 2]
  • 电脑主机后置音频插孔无声?还得Realtek高清晰音频管理器调教
  • 【题解】AT_abc386_d AtCoder Beginner Contest 386 D Diagonal Separation
  • 【每日学点鸿蒙知识】List+Swipe滑动冲突、下拉刷新、编译错误定位、监听生命周期、上架应用市场要求
  • 分布饼状图——开发解释——未来之窗行业应用跨平台架构
  • 零售小程序怎么自己搭建?开个小卖铺如何留住客户?
  • mybatisPlus基础
  • 服务器数据恢复—磁盘阵列中多块硬盘离线导致存储中数据无法访问的数据恢复
  • SpringMVC中的拦截器
  • MVC 架构学习笔记
  • CUTLASS:高性能 CUDA 线性代数模板库详解
  • 过圆外一点与圆相切的直线
  • 表单验证不生效
  • 前端Monorepo实践分享
  • GXUOJ-算法-第四次作业(圆排列、连续邮资、n皇后、符号三角形)
  • 「下载」智慧文旅运营综合平台解决方案:整体架构,核心功能设计
  • Rabbitmq追问2