• 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;
                    }
                }
            }


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

  • 相关阅读:
    Extjs 动态改变列名
    ext+dwr DynamicGridPanel 封装 态创建ext grid
    extjs 动态表单模板二
    extjs 动态表单模板
    EXTJS 学习笔记(共17项,20090924更新)
    Ext核心API详解Ext.tree.TreePanel
    ExtJS GridPanel动态加载列
    ExtJs之combobox详解
    在 LotusScript 中为自定义对象模拟事件
    Firefox下如何将回车键转为Tab键
  • 原文地址:https://www.cnblogs.com/sjns/p/3283051.html
Copyright © 2020-2023  润新知