从数据库填充树列表

时间:2015-12-18 03:42:06

标签: vb.net

我希望用我们的公司结构填充一个树形图。在我的数据库中,我有一个表格,其位置具有以下布局

PositionID - Integer for the position
PositionText - Text for the position
ReportsToID - Position ID that this position reports to.

我想加载首先向positionID = 0(根级别)报告的位置,然后在填充Treeview时从那里开始级联加载每个位置,这样我就可以得到如下内容:

-Position 1
  -Position 3
  -position 5
     -Position 7
  -Position 4
     -Position 2

关于如何实现这一目标的任何建议都会很棒,甚至一些突发码也能帮助我走上正轨。

编辑:我能够轻松地将节点添加到我的树视图中,但是我有点挂断的是如何循环/递归搜索以便我可以处理我的项目并添加所有内容。我想某种方式我需要添加我的第一个节点,看看是否有人向该节点报告。如果有,请添加它们。然后,对于下一级节点,查看是否有人向他们报告然后继续。 我可能有点坚持如何干净有效地完成循环。

2 个答案:

答案 0 :(得分:1)

使用此记录集:

SELECT ReportsToID, PositionID, PositionText 
FROM Table 
ORDER BY ReportsToID, PositionID

然后

  1. 在树中创建根节点(0)
  2. 取第一行(需要ReportsToID=0
  3. PositionID节点下创建ReportsToID节点 请注意,{1}已在步骤1或3中创建
  4. 选择下一行并转到第3步
  5. 获得订单意味着您在进入下一级别之前总是创建一个完整的级别。

    请注意,这里有一个重要的假设,那就是ID是增量的。例如,ReportsToID的级别低于ReportsToID=5

    您可以通过添加“路径”的更复杂的查询来避免这种情况。柱。然后你在路上订购。你需要一个CTE。

答案 1 :(得分:0)

TreeViews很棘手。 有两种方法。

  1. 立刻填满所有树。
  2. 优点:你曾经打过一次数据库。更少的代码。

    缺点:如果有大量数据,treeView将需要一些时间来填充。

    1. 仅填充第一级,添加虚拟节点(以指示错误的交叉符号),并在BeforeExpand上查询数据库以填充节点。
    2. 优点:非常快。

      缺点:在每个节点的第一个BeforeExpand上查询数据库。更多代码。

      所以,如果你只有一些节点要填充第一种方法。 但是,如果有严重的数据,第二个更好。