GridControl 列合并(自定义分组条件)

说明:

    当前方式不提倡,最好还是使用 (1)主从表、或(2)分组。

一、数据源

DataTable dta = new DataTable();
dta.Columns.Add("A");
dta.Columns.Add("B");
dta.Columns.Add("C");
dta.Columns.Add("D");
for (int m = 1; m <=20; m++)
  dta.Rows.Add($"A{m/5}", $"B", $"C{m/2}",$"D{m}");
grid.DataSource = dta;

二、默认合并

gv.OptionsView.AllowCellMerge = true;

三、根据条件分组合并(根据列A分组合并)

调用示例:

FuncGrid.SetMergeCell(gv, "A", new[] { "B", "C" });

四、自定类

        #region 按条件合并
        
        private static string _groupName;
        private static string[] _mergeCols;
        /// <summary>
        /// GridView合并(自定义分组)
        /// </summary>
        /// <param name="gv"></param>
        /// <param name="groupName">分组列(需要合并的列)</param>
        /// <param name="mergeCols">需要合并的列</param>
        public static void SetMergeCell(GridView gv, string groupName, string[] mergeCols)
        {
            gv.OptionsView.AllowCellMerge = true;
            _groupName = groupName;
            _mergeCols = mergeCols;
            gv.CellMerge += Gv_CellMerge;
        }

        private static void Gv_CellMerge(object sender, CellMergeEventArgs e)
        {
            try
            {
                GridView myGv = sender as GridView;
                if (myGv == null) return;
                DataRow dra1 = myGv.GetDataRow(e.RowHandle2 - 1);
                DataRow dra2 = myGv.GetDataRow(e.RowHandle2);
                if (dra1 == null || dra2 == null) return;

                foreach (string str in _mergeCols)
                {
                    if (e.Column.FieldName == str)
                    {
                        bool isOk1 = dra1[_groupName].ToString() == dra2[_groupName].ToString();
                        bool isOk2 = dra1[str].ToString() == dra2[str].ToString();
                        e.Merge = isOk1 && isOk2;
                        e.Handled = true;
                    }
                }
            }
            catch
            {
            }
        }

        #endregion

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值