主题:有关于TreeView的问题
宝宝啊呜
[专家分:990] 发布于 2005-11-11 11:01:00
到目前为止,我一直在逃避这个事实,做程序的时候一直避免使用到TreeView。[em8]
希望各位朋友能够给些指点。
到目前为止,我只能写出界面上的代码,无法添加到后台数据库中去,如下:
这个是想做一个部门级别的树
Private Sub CmdNewDepa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdNewDepa.Click
Dim _node As TreeNode
If Not Me.txtDepa.Text.Trim.Equals("") Then
_node = New TreeNode(Me.txtDepa.Text.Trim)
Me.TreeView1.Nodes.Add(_node)
End If
txtDepa.Text = ""
End Sub
Private Sub CmdNewDepaChild_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdNewDepaChild.Click
Dim _node As TreeNode
If Not Me.txtChildDepa.Text.Trim.Equals("") Then
If Not Me.TreeView1.SelectedNode Is Nothing Then
Me.TreeView1.SelectedNode.Nodes.Add(Me.txtChildDepa.Text.Trim)
Else
Me.TreeView1.Nodes.Add(Me.txtChildDepa.Text.Trim)
End If
End If
txtChildDepa.Text = ""
End Sub
我希望能够动态添加到数据库中去,怎么弄??
另外,数据库的结构应该是怎么样的,
一级部门 二级部门 三级部门
a b c
a b d
还是应该
一级部门 二级部门 三级部门
a b c
Null Null d
或者说还有其他的结构,请大家指教
回复列表 (共12个回复)
沙发
宝宝啊呜 [专家分:990] 发布于 2005-11-11 16:55:00
要下班了,自己顶起……
板凳
宝宝啊呜 [专家分:990] 发布于 2005-11-14 09:04:00
继续up~~~~~~~~
快来人哈!!!!!!!!!!!!!!!!!!!!
3 楼
dengxi [专家分:310] 发布于 2005-11-14 10:19:00
宝宝我做了一个..哈哈...希望能帮到你..但是你帮我看看那个逻辑性的错误的那贴子啊...
我实在不知道怎么改了...帮帮啦....别拒绝噢......
我在他本身的属性里面添加了根结点和两个子结点..
ComboBox1.Items.Add("普通用户")
ComboBox1.Items.Add("超级用户")
Dim i As Integer
Dim MyNode As String
TreeView1.ExpandAll()'展开树
MyDataSet.Clear()
MyODA.TableMappings.Clear()
Selstr = "select * from users"
Call 联接数据库.LDB()'这是一个联数据库的函数
For i = 0 To MyDataSet.Tables("user").Rows.Count - 1
If MyDataSet.Tables("user").Rows.Count = 0 Then
Exit Sub
Else
MyNode = MyDataSet.Tables("User").Rows(i)("帐号").ToString
Select Case MyDataSet.Tables("User").Rows(i)("权限").ToString
Case "普通用户"
TreeView1.TopNode.NextVisibleNode.Nodes.Add(MyNode)
TreeView1.ExpandAll()
Case "超级用户"
TreeView1.TopNode.LastNode.Nodes.Add(MyNode)
TreeView1.ExpandAll()
Case Else
Exit For
Exit Select
Exit Sub
End Select
End If
Next
Myconn.Close()
End Sub
如果你要选择那一个结点的话..你就用selectNode这个东西..不晓得我打错没有..这东西不全面..还是有点死..因为我是在他本身属性里面添进去的..但是下面的内容是数据库里面的...
4 楼
宝宝啊呜 [专家分:990] 发布于 2005-11-14 10:43:00
谢谢哈,还是你够义气,55,感动ing~~~~~
你说的我明白了。
另外的问题,就是你的那个数据库里的结构是怎么样的??看我一开始的帖
5 楼
huyun2008 [专家分:90] 发布于 2005-11-14 13:24:00
Dim Item, Item1 As String
Dim classin As New ClassInfo
classin = GetClass(0)
Dim classin1 As New ClassInfo
Dim i, j As Integer
For j = 0 To classin.count - 1 '用for循环来把学生信息全部显示出来
classin = GetClass(j) '获取每行信息
Item = classin.nianji
classin1 = GetClass1(0, Item)
NewNode = TreeView1.Nodes.Add(Item)
NewNode.ImageIndex = 5 '折叠时显示的图标
' NewNode.SelectedImageIndex = 5 '展开时显示的涂标
For i = 0 To classin1.count - 1
classin1 = GetClass1(i, Item) '获取每行信息
Item1 = classin1.banji
NewNode1 = NewNode.Nodes.Add(Item1)
NewNode1.ImageIndex = 4 '折叠时显示的图标
Next i
TreeView1.Select()
Next j
TreeView1.Select()
6 楼
ryowu [专家分:6470] 发布于 2005-11-15 14:15:00
数据库表的结构如下
最简单的是只需要一个节点表,保存每个节点的名称和分类
CREATE TABLE [dbo].[Nodes] (
[NodeID] [int] IDENTITY (1, 1) NOT NULL ,
[NodeName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[NodeClass] [int] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Nodes] ADD
CONSTRAINT [PK_Nodes] PRIMARY KEY CLUSTERED
(
[NodeID]
) ON [PRIMARY]
GO
这里默认NodeClass为0的时候就是在根节点下面的点
同时手动录入一些测试数据
NodeID NodeName NodeClass
1 财政部门 0
2 人力资源 0
3 开发部门 0
4 会计办公室 1
5 企业文化宣传科 2
6 项目组 3
7 产品组 3
8 外包组 3
7 楼
ryowu [专家分:6470] 发布于 2005-11-15 14:26:00
假定treeview1就是你界面上的树控件,它必须有一个根节点(可视化建立)
使用下面这段代码进行遍历,就可以即时从数据库中组织树结构并显示了
/// <summary>
/// 遍历并建立树控件
/// </summary>
/// <param name="nodeID">树结点的ID,0代表根</param>
/// <param name="tn">要增加孩子的节点,第一次给TreeView1.Nodes[0]就可以了</param>
public void BuildTree(int nodeID,TreeNode tn)
{
//这句是伪代码,获得sql语句指定的数据集合
DataTable dt = GetTable("获得nodeID指定的节点下面的所有节点,select * from Nodes where NodeClass = nodeID");
foreach(DataRow dr in dt.Rows)
{
TreeNode tmpnode = new TreeNode(dr["NodeName"].ToString());
tn.Nodes.Add(tmpnode);
//递归自己
BuildTree(Convert.ToInt32(dr["NodeID"]),tmpnode);
}
}
8 楼
宝宝啊呜 [专家分:990] 发布于 2005-11-15 17:00:00
谢谢,我琢磨下先~~
你是知道我是看见花括号就想撞墙的人,呵呵[em4]
9 楼
cky726 [专家分:50] 发布于 2005-11-15 17:40:00
宝宝啊呜 这是正中vb.net代码,希望对你有帮助
Dim sqlstr As String
sqlstr = "Server=(……);Database=……;uid=……;pwd=……"
'在treeView 中添加节点
Dim qzNode As New TreeNode
qzNode.Text = "部门一"
qzNode.ImageIndex = 0
TreeView1.Nodes(0).Nodes.Add(qzNode)
Dim nnNode As New TreeNode
nnNode.Text = "部门二"
nnNode.ImageIndex = 0
TreeView1.Nodes(0).Nodes.Add(nnNode)
…………部门三
…………部门四
下面为从SQL中导入各部门的子节点,SQL中的一个表的数据就表示一个部门的子节点
Dim ConnsqlQZ As New SqlConnection(sqlstr)
ConnsqlQZ.Open()
Dim biaoQZ As New SqlCommand("select * from ……")
biaoQZ.Connection = ConnsqlQZ
Dim myReaderqz As SqlDataReader 'SqlDataReader
myReaderqz = biaoQZ.ExecuteReader(CommandBehavior.CloseConnection)
Do While myReaderqz.Read
Dim mySubNode As New TreeNode
mySubNode.Text = myReaderqz.Item("catName")
qzNode.Nodes.Add(mySubNode)
Loop
同样历遍导入部门二、部门三
10 楼
宝宝啊呜 [专家分:990] 发布于 2005-11-17 16:19:00
我现在数据库的结构是这样子的
父结点 子结点
-------------------
无 1
无 2
1 123
123 1234
2 22
在TreeView中要显示的效果是
1
-----123
------1234
2
-----22
应该怎么读出来,我郁闷到现在了,递归出来的数据一塌糊涂……
拜托大家写出详细的代码吧,555555,先谢谢了~~~~~~~~~~~
我来回复