問題描述
對TreeList初始化之后,設置treelist的焦點節點時,發現每次初始化控件的時不能正確的綁定焦點節點,第二次點開treelist的時候才會正常的設置目標節點為焦點節點。
截圖
解決方案
在重構代碼的時候,無意間調整了一下代碼的順序,發現能夠正確設置目標節點為焦點節點。
private void BindData(DataTabel pDataTabel)
{
...
this.treeList_Popup.ParentFieldName = "I_PARID";
this.treeList_Popup.KeyFieldName = "I_ID";
this.treeList_Popup.DataSource = null;
this.treeList_Popup.DataSource = pTreeSourceDataTable;
...
}
// 調用代碼
...
TreeListNode pFocusNode = this.treeList_Popup.FindNodeByFieldValue("C_CODE", value);
this.treeList_Popup.FocusedNode = pFocusNode;
...
上述代碼,在綁定數據源時,先設置了父節點字段和關鍵字段,再綁定的數據,這樣會導致初始化TreeList失敗,所以在第一次設置焦點節點的時候會失敗,在第二次綁定數據源時,才會正常的綁定數據源,才能正常的顯示設置的焦點節點。
更改之后的BindData方法中的代碼為
private void BindData(DataTabel pDataTabel)
{
...
// 先綁定數據源再設置父節點字段和關鍵字段
this.treeList_Popup.DataSource = null;
this.treeList_Popup.DataSource = pTreeSourceDataTable;
this.treeList_Popup.ParentFieldName = "I_PARID";
this.treeList_Popup.KeyFieldName = "I_ID";
...
}
調換順序之后就能在第一次初始化空間的時候能夠正確的創建treeList。從而保證了正常的設置焦點,之前一直以為是焦點設置的方法的問題。換了好多的焦點設置的方法。
小結
在對需要對空間進行初始化數據源的控件時,先綁定數據源再對控件進行設置。希望同樣遇到這個問題的同志們能夠看到這個文章。