1

好的,我有一个树视图,我正在使用数据表从数据库中填充。该查询工作并生成一个包含两条记录的数据表。我使用的字段包含以下内容:

  1. sksorter\images\africa\9544\high resolution\
  2. sksorter\images\africa\9545\high resolution\

我正在尝试生产一棵树

分类器

-图片

- 非洲

---9544

- - 高分辨率

---9545

- - 高分辨率

它可以工作,但它缺少最终的高分辨率节点......我很确定这是因为我使用的方法在创建它之前对每个节点进行了查找,然后它看到“高分辨率”存在并且不创建它! !

我失去了任何想法?谢谢!!

For Each dt As DataRow In dtData.Rows
    'load the node we are as the base node?      
    Dim stTemp As String()
    stTemp = dt.Item(0).ToString.Split("\")
    Dim otest As String

    For Each strNode As String In stTemp
        If strNode <> String.Empty Then
            'Index = Dir.LastIndexOf("\")
            otest = String.Empty
            otest += strNode + "\"
            Dim nodes As TreeNode() = trvFolders.Nodes.Find(otest, True) 
            If nodes.Length = 0 Then
                If basenode Is Nothing Then
                    basenode = trvFolders.Nodes.Add(otest, strNode)
                Else
                    basenode = basenode.Nodes.Add(otest, strNode)
                End If
            Else
                basenode = nodes(0)
            End If
        End If
    Next
Next
4

1 回答 1

0

问题是这一行:

Dim nodes As TreeNode() = trvFolders.Nodes.Find(otest, True)

“高分辨率”这个词已经在节点树中,它在第二遍找到它并且什么都不做。

这就是我修改你的代码的方式,它只会从当前位置而不是从一开始搜索节点:

Dim parentNode As TreeNode = Nothing
For Each strNode As String In stTemp
  If strNode <> String.Empty Then
    Dim otest As String = strNode + "\"
    If parentNode Is Nothing Then
      Dim nodes As TreeNode() = trvFolders.Nodes.Find(otest, False)
      If nodes.Length = 0 Then
        parentNode = trvFolders.Nodes.Add(otest, strNode)
      Else
        parentNode = nodes(0)
      End If
    Else
      Dim nodes As TreeNode() = parentNode.Nodes.Find(otest, False)
      If nodes.Length = 0 Then
        parentNode = parentNode.Nodes.Add(otest, strNode)
      Else
        parentNode = nodes(0)
      End If
    End If
  End If
Next
于 2013-08-01T20:39:01.443 回答