1. 點擊葉子節點是希望Open鍵顯示,點擊非葉子節點時希望隱藏。實踐中發現點擊到了非葉子節點圖標,Open沒有隱藏,如何解決?
增加一個判斷:
if (_hitInfo.HitInfoType != HitInfoType.Cell&&_hitInfo.HitInfoType!=HitInfoType.SelectImage) { return; }
紫色代碼用來判斷當前鼠標點擊點是否是節點所在的單元格;
紅色代碼用來判斷當前鼠標點擊點是否是節點的圖標;
這樣的話不論是點擊單元格還是點擊圖標都能被捕捉到,只要點擊了其中之一,Open鍵就會被隱藏(或者被顯示)。
2. 右鍵刪除節點時,如果其祖先節點都只有一個孩子,也就是相當於數據庫中只有一條數據,此時刪除了節點,則該節點的所有祖先節點也應該被刪除;如果某一級的祖先節點由多於一個子節點,則該祖先節點和被刪除節點之間的所有節點應該刪除。(好繞口,不知道我需求的人估計看不明白,可是沒時間詳細解釋了,有什么疑問請留言吧,具體情況具體溝通),如何解決?
public void HasChildNode() { treeList1.DeleteNode(treeList1.FocusedNode); while (!treeList1.FocusedNode.HasChildren && !Equals(treeList1.FocusedNode.GetValue(columnID: 0), "本地數據庫"))//當刪到“本地數據庫”的時候就不再刪除了 { treeList1.DeleteNode(treeList1.FocusedNode); } //刪除節點后,當前焦點必定不是葉子結點,所以使open間隱藏 lciBtnOpen.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; }
寫了一個方法來判斷。首先刪除節點后,數據庫中的節點數據已經刪除。(我的所有節點數據都是在一張表中)接下來在刷新treelist 的情況下,刪除節點用treelist 的 deletednode方法。刪除當前節點后,treelist 的focusedNode 會自動轉到刪除節點的父節點上(或相鄰兄弟節點),此時判斷一些當前的節點是否有子節點,如果沒有,就把當前節點也刪除。
