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类型可简化判断。
..... --------------------编程问答-------------------- 你的数据库里面应该标明哪些是上级任务,哪些上级任务有下级任务,哪些下级任务的上级任务是哪个。。这样你才能一个节点一个节点的全添加出来吧~ --------------------编程问答--------------------
数据结构决定算法。数据结构太烂,就懒得再看下去了。因为首先要写大量的代码把它纠正过来。 --------------------编程问答-------------------- 最近脑袋是有点进水。。。。。我想想看,麻烦各位了 --------------------编程问答-------------------- 应该是有上级标志,
ID | 上级ID | 显示值 | Value值 --------------------编程问答-------------------- 你是用for循环来做不是更好吗?
补充:.NET技术 , VB.NET