填充树






1.62/5 (9投票s)
我有时需要以树形结构显示数据。如果尝试从数据库填充树,这并不是一个大问题。由于在 .NET 中没有像 VB6 那样添加键和子节点的功能,所以必须使用递归来完成。
引言
首先,我们必须讨论数据库格式。这里唯一的条件是需要两个字段 - ID、ParentID 和一个文本字段。所有其他字段都是可选的。为此,我准备了一个具有该结构的小型数据库。
由于每个连接只能有一个 DataReader,因此我们不能立即使用递归。相反,对于第一步,我们将准备一个缓冲区数组来保存所有必需的数据。这将比使用单步递归快几倍,但会消耗大量内存。我认为这个解决方案是可以的,因为树通常不会很大。对于这一步,我们使用 DBTree 类中的“FillTree”方法。此方法仅将树对象作为参数,并在填充缓冲区后进入第二步。
第二步是递归本身。它包含在“RecurTree”方法中,并接受树、父节点和父 ID 作为参数。由于树与第一步中的树相同,因此这里没有太多解释。parentNode 参数用于在递归过程中传播当前节点的父节点。在第一步中,我们发送 Nothing 值,因为那里没有父节点。如果是这种情况,新节点将被添加到树本身。ParentID 基本上是一回事,但用于过滤掉在当前递归传递中不相关的节点。在第一次传递中,我们发送 0 值,因为我们将 parentID=0 的项目视为根。
就这样了。我认为如果您查看源代码,所有这些都会更清楚。