C1 FlexGrid控件 Editor 冲突问题

当给C1FlexGrid控件加入 Checkbox后,添加新行时对新行的Editor 赋新控件时,会冲突如下图:

     

下面我们借助BeforeRowColChange 事件来解决这个问题:

我理解的此事件是当前鼠标选择中单元格发生改变时触发。(可能会涉及到多选择单元格的情况 ,因本需要不涉及上问题,所以此文章只做参考

首先我先说一下思路

1、创建一个Dictionary<int, Control> 的对象 , int: 记录行号,  Control:记录当前行把拥有的Editor。

2、当C1FlexGrid初始加载完成后,循环把 C1FlexGrid 中每行的Editor 缓存到第1步创建的对象中。(因为后面我会清楚掉C1FlexGrid的行Editor,我们会用此缓存把数据在还原回去)

3、BeforeRowColChange 事件中判断是否清楚清C1FlexGrid的行Editor代码如下 。

创建缓存对象:

private Dictionary<int, Control> dic = new Dictionary<int, Control>();  //缓存FlexGrid中的Editor控件 用于解决CheckBox不冲突问题  

加载数据完成后,记录缓存

Column cl = c1FlexGrid1.Cols.Add();
            cl.Caption = "多选";
            cl.Name = "duoxuan";
            cl.DataType = typeof(Boolean);
            cl.AllowEditing = true;
            //CheckBox ccc = new CheckBox();
            //cl.Editor = ccc;

            ComboBox cb = new ComboBox();
            cb.Items.Add("1");
            cb.Items.Add("2");

            cl = c1FlexGrid1.Cols.Add();
            cl.Caption = "时间";
            cl.Name = "shijian";
            cl.AllowEditing = true;
            //cl.Editor = cb;

            DateTimePicker dtp = new DateTimePicker();
            Row row = c1FlexGrid1.Rows.Add();
            row[1] = "true";
            row.Editor = dtp;
            row = c1FlexGrid1.Rows.Add();
            row[1] = "true";
            row.Editor = cb;

            //缓存数据到 缓存对象中
            foreach (Row r in c1FlexGrid1.Rows)
            {
                dic.Add(r.Index, r.Editor);
            }

BeforeRowColChange事件

private void c1FlexGrid1_BeforeRowColChange(object sender, RangeEventArgs e)
        {
            if (e.NewRange.c1 == 1)
            {
                c1FlexGrid1.Rows[e.NewRange.TopRow].Editor = null;
            }
            if (e.NewRange.c1 == 2)
            {
                KeyValuePair<int, Control> row = dic.Where(o => o.Key == e.NewRange.TopRow).FirstOrDefault();
                if (!row.Equals(null))
                {
                    c1FlexGrid1.Rows[e.NewRange.TopRow].Editor = row.Value;
                }
            }
        }


这样就可以解决了,如果还有什么疑问,可以留言。

原文地址:https://www.cnblogs.com/sjns/p/3283051.html