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

 

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);
}
复制代码

转载于:https://www.cnblogs.com/liushunli/p/4189344.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值