C1 FlexGrid控件 Editor 冲突问题

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

C1 FlexGrid控件 Editor 冲突问题      C1 FlexGrid控件 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("");
cb.Items.Add(""); 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[] = "true";
row.Editor = dtp;
row = c1FlexGrid1.Rows.Add();
row[] = "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 == )
{
c1FlexGrid1.Rows[e.NewRange.TopRow].Editor = null;
}
if (e.NewRange.c1 == )
{
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;
}
}
}

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

上一篇:OPenCL


下一篇:mysql 1449 : The user specified as a definer ('root'@'%') does not exist ,mysql 赋给用户权限 grant all privileges on