WPF的C1FlexGrid控件合并相同列

  <c1:C1FlexGrid Name="CfgRiskReviewItem" Style="{StaticResource Green}" ItemsSource="{Binding RiskReviewList,Mode=TwoWay}" SelectedItem="{Binding CurrentRiskReviewItem,Mode=TwoWay}" 
                        LoadedRows="FlexGrid_LoadedRiskReviewRows_RowIndex" PreviewKeyDown="c1FlexGrid_PreviewKeyDown"  MinRowHeight="50"  Margin="5,5,5,0" AllowMerging="Cells"

表格增加AllowMerging="Cells"属性

cs代码初始化方法里面写上

CfgRiskReviewItem.CellFactory = new FlexGridShowCellFactory();
            CfgRiskReviewItem.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 "RiskName":
                        return SetRg(grid, rg, new List<string>() { colName });
                   // 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、付费专栏及课程。

余额充值