最近写一个项目DEMO , 用到了FlexGrid 。 于是做技术调查之余把一些东西总结出来,做个DEMO 。
主要目的是一个父子关系的结构展示,并可以通过鼠标操作来实现项目之间的移动, 要求为只能选择父项 或者只能选择子项。 于是就出现了跨行选择的问题。并考虑到操作简易性问题,实现了鼠标拖移过程中的行判断。
主要的设置 :
隐藏 列首和行首 自己构造树表
this.fg.Cols[0].Visible = false;
this.fg.Rows[0].Visible = false;
设置选择模式 这样就能实现了像listbox中一样的ctrl shift 操作了。
fg.SelectionMode = SelectionModeEnum.ListBox;
PS: 原来不知道这样子, 在beforemousedown事件中自己来判断 ctrl shift 来处理了 附下判断方法
if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
return;
if ((Control.ModifierKeys & Keys.Control) == Keys.Control)
return;
设置行合并 , 处理相邻单元格相同的话进行合并
fg.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Free;
接下来是事件
主要用到了
DragDrop // 主要处理逻辑, 行拖动以后的位置和顺序问题
BeforeMouseDown // 这里主要是纪录下第一次点击时候 是标题行还是子项目行 , 然后再划过事件中就选择屏蔽相应的行。
DragOver // 这个也很重要, 设置下鼠标拖动后的操作 这里是MOVE 。
另外还有个事件
AfterSelChange // 用来处理鼠标划过时进行行判断。
目前的效果基本实现了,不过还是有很多不满意的地方, 比如选择多行以后单击被选择的某行 其他行不会被取消选择, 这点其实很暧昧的,因为情况很多, 所以暂时没有实现。 另外操作上 一定要先点击选中 再点下才能拖动, 有时候会觉得不方便。 等有时间再看了。 下面是源码地址。
程序展示地址 : http://files.cnblogs.com/seagate_cn/DEMOEXE.zip
程序源码地址 :
http://files.cnblogs.com/seagate_cn/flexgrid.zip
posted on 2007-09-26 17:06
╃小〥斌╄ 阅读(502)
评论(1) 编辑 收藏 所属分类:
c#专栏