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();
            }
        }

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值