DevExpress TreeList 拖動時中如何判斷源節點作為目標節點的子節點還是兄弟節點


最近用了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);
}




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM