终于搞定DevExpress的TreeList控件的刷新数据源后恢复刷新前节点展开状态的问题。简而言之,就是更新被修改的内容时让树看上去不动,原来展开的节点还是展开,原先闭合的节点还是闭合。
由于控件本身没有提供这种方法,所以只能手动实现了。实现的思路如下:
1、保存刷新前节点状态,试过几种方法都不理想,最后采取的办法是用一个List保存Expanded属性为True的节点的KeyID。
var ids = new List<object>(); treList.GetNodeList().FindAll(n => n.Expanded).ForEach(n => { ids.Add(n.GetValue("ID")); });
2、刷新后还原节点状态
ids.ForEach(id => { treList.FindNodeByKeyID(id).Expanded = true; });
如果需要还原焦点节点的话,需要在刷新前获取FocusedNode的id并保存起来,刷新后将FocusedNode的值设置一下就可以了。
希望这点小小经验能够帮助到需要他的人。
时间: 2024-11-09 02:17:36