当前位置:编程学习 > C#/ASP.NET >>

VB.NET下的TreeView全面刷新

各位大佬,在网上找了半天都没有办法解决,TreeView全面刷新的问题,请各位帮个忙。
我有个数据库,主要的结构基本上是这样:
RWID INT 索引ID,任务识别ID
RWSID INT 上级任务ID
RWtitle string 任务标题
RWWID INT 无下级任务标示,0无下级,1有下级

我在程序中引入了一个TreeView,想把这个库里存的东西全部刷新展现出来,可算法老是不对.而且TreeView的一些属性也不熟悉,请各位指点一下

我的部分代码如下:
         

              TreeView1.Nodes.Clear()
            dep0SQL = "SELECT RWGname FROM TD_RWGRE WHERE  RWPname = '" & loadMAN & "'"'根据登陆人找出项目组
            dep0com = New OleDbCommand(dep0SQL, SQLSEConn0)
            SQLSEConn0.Open()
            dep0dr = dep0com.ExecuteReader()
            While dep0dr.Read()
                '找到项目组后,按项目组把主任务理出来
                dep1SQL = "select RWtitle,RWID,RWWID from TD_RWList where RWSID=0 and RwtoDep='" & dep0dr.Item("RWGname") & "'" & myrwall & " order by RWID"
                dep1com = New OleDbCommand(dep1SQL, SQLSEConn)
                SQLSEConn.Open()
                dep1dr = dep1com.ExecuteReader()
                While dep1dr.Read()
                    Dim tree_root As New TreeNode()
                    tree_root.Text = dep1dr.Item("RWID") & ")" & dep1dr.Item("RWtitle") '树上显示的是根节点名称
                    myRWWID = dep1dr.Item("RWWID")
                    myRWSID = dep1dr.Item("RWID")
‘----------------------这之间的处理办法肯定是错误的-----------------
‘我的思路是看是否有下级标志,如果有,就顺着往下刷,如果刷到某级,说下面没有了,就回到上面来找上面这条的下一条,这个算法怎么写都不对,而且TreeView如何能增加下一级节点也不知道怎么处理。
’而且这个树的层级不一定全部一致。
                    While myRWWID = 1 '是否有下级标志,1有0无

                        dep2SQL = "select RWID,RWtitle,RWdetails,Rwforman,Rwtoman,RWEndID,RWWID from TD_RWList where RWSID ='" & myRWSID & "' " & myrwall
                        dep2com = New OleDbCommand(dep2SQL, SQLSEConn1)
                        SQLSEConn1.Open()
                        dep2dr = dep2com.ExecuteReader()
                        Try
                            While dep2dr.Read()
                                Dim tree_leaf As New TreeNode()
                                tree_leaf.Text = dep2dr.Item("RWID") & ")" & dep2dr.Item("RWtitle") & "(时限:" & dep2dr.Item("RWEndID") & "  下达人:" & dep2dr.Item("Rwforman") & " 实施人:" & dep2dr.Item("Rwtoman") & ")"
                                TreeView1.Nodes.Add(tree_leaf)
                                myRWSID = dep2dr.Item("RWID")
                                If dep2dr.Item("RWWID") = 1 Then
                                    myRWSID = dep1dr.Item("RWID")
                                End If
                            End While

                        Catch ex As Exception
                            MsgBox(ex.Message)
                        Finally

                            SQLSEConn1.Close()
                        End Try


                    End While
’------------------------------------------------------

                    TreeView1.Nodes.Add(tree_root)
                End While
                SQLSEConn.Close()
            End While
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            SQLSEConn0.Close()
        End Try

        TreeView1.ExpandAll()
        TreeView1.Select()
请用过的大哥们帮忙看看,教个办法。把思路推倒重来也可以啊。 --------------------编程问答-------------------- 一看你没用递归,就知道你根本写不了这个。 --------------------编程问答-------------------- 每添加一个节点,就要访问数据一次,这种方法系统开销太大了.

能不能一次性返回所有数据,通过linq语句把需要的数据查询出来.

还有你的任务上下级的关系,不知道你有几层关系,是否可以简化,或者用父子表的关系处理?
--------------------编程问答-------------------- 版主今天心情欠佳啊。
记忆中只有遍历Node时才需要递归,提取库里的数据刷新Nodes不需要啊。
建议:
一、楼主修改库结构,除掉多余的ID,只留一个。这个ID,你可以用一个字符串类型。比如:设一个9位的ID,前3位表示一级任务ID,中间3位表示二级任务ID,最后3位表示易做图任务ID....具体每一级ID使用位数根据任务的可能范围确定,这样如果是"001005123",我们就可以说是ID为001的一级任务下的005的二级任务下的123ID任务。
这样一来,简单明了。
二、数据导入控件前,以这个唯一的ID时行排序并筛选合适的记录。
三、导入时,根据每一级ID的预设位数及现值,判断任务级,确定Node的级别分别添加。
比如001000000,001025000,003125001三个ID号都是三个任务级别,每一级ID为3位。
添加Node的思路如下:
先截取后六位,判断是否为零,若是添加根节点。001000000就属于这类
若后六位不是零,再判断后三位是否为零,若是截取前三位获得父节点,并把该ID记录添加到这个父节点的子节点位置。
若后三位不是零,则取前六位判断其父节点,添加该记录为子节点。
注意:最好把ID号做为Node的Name或者Index。
改进:预设ID时,每一组级使用分隔符,使用Split函数便于分别提取;添加节点时,将"0."与ID组合转换为Float类型可简化判断。
..... --------------------编程问答--------------------     你的数据库里面应该标明哪些是上级任务,哪些上级任务有下级任务,哪些下级任务的上级任务是哪个。。这样你才能一个节点一个节点的全添加出来吧~ --------------------编程问答--------------------
引用 3 楼 mfkinfo 的回复:
版主今天心情欠佳啊。


数据结构决定算法。数据结构太烂,就懒得再看下去了。因为首先要写大量的代码把它纠正过来。 --------------------编程问答-------------------- 最近脑袋是有点进水。。。。。我想想看,麻烦各位了 --------------------编程问答-------------------- 应该是有上级标志,

ID | 上级ID | 显示值 | Value值  --------------------编程问答-------------------- 你是用for循环来做不是更好吗?
补充:.NET技术 ,  VB.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,