我有一个Nhibernate数据库,它提供数据作为分层列表<&gt ;.我在我的Windows窗体GUI中有一个TreeView和一个用所有根节点及其子节点填充TreeView的Backgroundworker(没有更多因为来自NHibernate的Lazy加载异常,但这没关系,因为我希望用户在TreeView中有很多节点)。
将Root节点及其子节点添加到TreeView的过程非常有效,但是当我单击一个Node来展开它时,应该从数据库中加载子节点的所有子节点并将其添加到TreeView中。从数据库成功请求节点并存储在缓冲区列表中(单击节点以展开它时)。
之后我尝试了一些想法,比如重建TreeView并完全重新填充它,但是使用这个解决方案我得到了所有扩展节点都崩溃的问题所以我试图存储扩展的节点并且它工作了。但我对这个解决方案不太满意,我觉得它可以更容易完成,因为每次用户扩展节点时我都不想重新填充TreeView。
如何从数据库重新加载TreeNode的子项并将其显示在TreeView中而无需重新填充整个TreeView?
答案 0 :(得分:0)
This SO Question应该为延迟加载提供一些帮助。
它使用线程池代替后台工作程序,您可以在google上找到/反对的参数,但在我看来,在Winforms中使用线程池并不是一个糟糕的选择。
使用上面的帖子来指导您,将正在扩展的节点传递给worker。获得填充节点所需的数据后,使用标准If ##.InvokeRequired Pattern在节点上执行实际工作。
希望有所帮助。