Infragistics.Win.UltraWinGrid 单元格合并及更新

本文介绍了如何使用Infragistics.Win.UltraWinGrid进行单元格合并,并提供了自定义的MergedCellEvaluator实现,通过比较指定列的值来决定是否合并。同时,也展示了如何设置合并后的样式和处理单元格更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

合并

/// <summary>

        /// 表格依赖型合并
        /// </summary>
        /// <param name="grid">要被合并的表格</param>
        /// <param name="count">合并前面多少列</param>
        /// <param name="coloumDefault">合并时依赖的列名称</param>
        public static void MergedCell(Infragistics.Win.UltraWinGrid.UltraGrid grid,int count,string coloumDefault)
        {
            for (int i = 0; i < count; i++)
            {
                CustomMergedCellEvaluator _CustomMergedCellEvaluator = new CustomMergedCellEvaluator();
                _CustomMergedCellEvaluator._coloumnDefault = coloumDefault;
                grid.DisplayLayout.Bands[0].Columns[i].MergedCellEvaluator = _CustomMergedCellEvaluator;
                grid.DisplayLayout.Bands[0].Columns[i].MergedCellStyle = MergedCellStyle.Always;
                grid.DisplayLayout.Bands[0].Columns[i].MergedCellAppearance.TextVAlign = Infragistics.Win.VAlign.Middle;
            }

        }

        public static void MergedCell(Infragistics.Win.UltraWinGrid.UltraGrid grid, string[] coloumns, string coloumDefault)
        {
            for (int i = 0; i < coloumns.Length; i++)
            {
                CustomMergedCellEvaluator _CustomMergedCellEvaluator = new CustomMergedCellEvaluator();
                _CustomMergedCellEvaluator._coloumnDefault = coloumDefault;
                grid.DisplayLayout.Bands[0].Columns[coloumns[i]].MergedCellEvaluator = _CustomMergedCellEvaluator;
                grid.DisplayLayout.Bands[0].Columns[coloumns[i]].MergedCellStyle = MergedCellStyle.Always;
                grid.DisplayLayout.Bands[0].Columns[coloumns[i]].MergedCellAppearance.TextVAlign = Infragistics.Win.VAlign.Middle;
            }
        }

public class CustomMergedCellEvaluator : Infragistics.Win.UltraWinGrid.IMergedCellEvaluator
        {
            public CustomMergedCellEvaluator()           {            }

            public string _coloumnDefault = string.Empty;

            public bool ShouldCellsBeMerged(UltraGridRow row1, UltraGridRow row2, UltraGridColumn column)
            {
                if (_coloumnDefault != string.Empty && _coloumnDefault != "")
                {
                    if (row1.Cells.Exists(this._coloumnDefault))
                    {
                        try
                        {
                            object v1 = row1.Cells[this._coloumnDefault].Value;
                            object v2 = row2.Cells[this._coloumnDefault].Value;
                            return v1.Equals(v2);
                        }
                        catch {
                            return true;
                        }
                    }
                    else
                    {
                        return true;
                    }
                }
                else
                {
                    //未指定 主列,则默认一直合并
                    return true;
                }
            }
        }


更新

/// <summary>

        /// 根据依赖列 更新相应列
        /// </summary>
        /// <param name="judgeColoumn">判断依据所在列</param>
        /// <param name="judgeValue">判断依据所在列当前单元格值</param>
        /// <param name="newValue">当前修改的单元格值</param>
        /// <param name="uc">当前修改的单元格所在列</param>
        /// <param name="ug">当前表格</param>
        /// <param name="CellEventHandler">当前表格单元格修改后事件委托
        ///                                 (由于事件为单元格更新,此方法用来按一定条件更新此列其他单元格,
        ///                                     因此会陷入死循环),所以每次在更新前,要去掉此事件,在完成后再加上</param>
        public static void UpdateCellValueByCondition(
            string judgeColoumn, 
            object judgeValue, 
            object newValue,
            Infragistics.Win.UltraWinGrid.UltraGridColumn uc,
            Infragistics.Win.UltraWinGrid.UltraGrid ug,
            Infragistics.Win.UltraWinGrid.CellEventHandler CellEventHandler
            )
        {
            ug.AfterCellUpdate -= CellEventHandler;
            for (int i = 0; i < ug.Rows.Count; i++)
            {
                Infragistics.Win.UltraWinGrid.UltraGridRow ur = ug.Rows[i];
                if (ur.Cells[judgeColoumn].Value.Equals(judgeValue))
                {
                    ur.Cells[uc].Value = newValue;
                }
            }
            ug.AfterCellUpdate += CellEventHandler;
        }

        /// <summary>
        /// 根据依赖列 更新相应列
        /// </summary>
        /// <param name="judgeColoumn">判断依据所在列</param>
        /// <param name="judgeValue">判断依据所在列当前单元格值</param>
        /// <param name="newValue">当前修改的单元格值</param>
        /// <param name="uc">当前修改的单元格所在列</param>
        /// <param name="ug">当前表格</param>
        /// <param name="CellEventHandler">当前表格单元格修改后事件委托
        ///                                 (由于事件为单元格更新,此方法用来按一定条件更新此列其他单元格,
        ///                                     因此会陷入死循环),所以每次在更新前,要去掉此事件,在完成后再加上</param>
        public static void UpdateCellValueByCondition(
            string[] judgeColoumn,
            object[] judgeValue,
            object newValue,
            Infragistics.Win.UltraWinGrid.UltraGridColumn uc,
            Infragistics.Win.UltraWinGrid.UltraGrid ug,
            Infragistics.Win.UltraWinGrid.CellEventHandler CellEventHandler
            )
        {
            ug.AfterCellUpdate -= CellEventHandler;
            for (int i = 0; i < ug.Rows.Count; i++)
            {
                Infragistics.Win.UltraWinGrid.UltraGridRow ur = ug.Rows[i];
                if (judgeColoumn != null && judgeValue != null && judgeColoumn.Length == judgeValue.Length)
                {
                    bool Vaild = true;
                    for (int j = 0; j < judgeColoumn.Length; j++)
                    {
                        if (!ur.Cells[judgeColoumn[j]].Value.Equals(judgeValue[j]))
                        {
                            Vaild = false;
                        }
                    }
                    if (Vaild)
                    {
                        ur.Cells[uc].Value = newValue;
                    }
                }
            }
            ug.AfterCellUpdate += CellEventHandler;

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值