zoukankan      html  css  js  c++  java
  • 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);
    }
    复制代码
  • 相关阅读:
    SW 查看 外部引用
    零散/未完成 SW 视图 坐标
    美团 大众 摩拜 猫眼 统一 账号
    lua file system lfs 软链接 硬链接
    SketchUp VS对比 SolidWorks
    安卓 自动化
    Windows 获取文件的实际路径、名字(大小写敏感)
    bat启动java程序
    java判断某个字符串是否是数字
    commonslogging和log4j配合使用
  • 原文地址:https://www.cnblogs.com/liushunli/p/4189344.html
Copyright © 2011-2022 走看看