码迷,mamicode.com
首页 > 其他好文 > 详细

DevExpress TreeList 拖动时中如何判断源节点作为目标节点的子节点还是兄弟节点

时间:2014-12-28 00:17:46      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:

 

Posted on 2012-01-10 14:02 marcozh 阅读(1738) 评论(3) 编辑 收藏

最近用了Dev的Treelist控 件,其中用到了拖动方法。众所周知的是,Dev的Treelist封装了原先用递归才能实现的树状显示,所以写代码非常方便。以前我做树形表,还需要一些 辅助字段如Level、HasChild等,维护起来也有点小麻烦,现在只要一个ParentId字段就够了,只要设置一下KeyFieldName和 ParentFieldName就可以了。

如:

tlCategory.KeyFieldName = "Id";
tlCategory.ParentFieldName = "ParentId";
tlCategory.DataSource = new BindingList<CategoryObject>(rsp.Categories);

 

如此一来基本上就是颠覆了我以前写树的方法,不过同时也带来了一点小问题:在拖动时,Dev内置了拖动效果,当源节点拖动到目标节点上方时,上下移 动鼠标会出现不同效果,出现黄色箭头时,说明源节点作为目标节点的子节点,出现蓝色向上或者向下箭头时,说明作为兄弟节点,这样一来,对界面的更新我是不 需要写代码了,但是怎样把这个结果回写到数据库呢?

按照原来的做法,一般是在DragDrop中写更新的代码,但是我现在在DragDrop事件中无法获知拖动时,源节点到底是作为目标节点的子节点,还是兄弟节点?

查阅了很多资料,终于搞明白了。

简单的方法是在AfterDropNode中写代码,这个算是绕弯路了。

另外的方法是重写OnDragDrop事件,代码如下:

技术分享
 protected override void OnDragDrop(System.Windows.Forms.DragEventArgs drgevent)
{
FieldInfo fi = typeof(TreeListHandler).GetField("fStateData", BindingFlags.Instance | BindingFlags.NonPublic);
StateData data = (StateData)fi.GetValue(Handler);
fi = typeof(DragScrollInfo).GetField("dragInsertDirection", BindingFlags.Instance | BindingFlags.NonPublic);
DragInsertDirection diDirection = (DragInsertDirection)fi.GetValue(data.DragInfo);

base.OnDragDrop(drgevent);
}
技术分享

DevExpress TreeList 拖动时中如何判断源节点作为目标节点的子节点还是兄弟节点

标签:

原文地址:http://www.cnblogs.com/liushunli/p/4189344.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!