问题描述
对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。从而保证了正常的设置焦点,之前一直以为是焦点设置的方法的问题。换了好多的焦点设置的方法。
小结
在对需要对空间进行初始化数据源的控件时,先绑定数据源再对控件进行设置。希望同样遇到这个问题的同志们能够看到这个文章。