标题:如何得到treeview中被复选框选中的节点名 ??????
只看楼主
abcfei
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-4-10
 问题点数:0 回复次数:10 
如何得到treeview中被复选框选中的节点名 ??????
我要做一个权限的管理,
先把人员从数据库中取出,显示在treeview1中,再把人员所对应的权限放到TREEVIEW2中,
然后再修改的时候要选取前面的复选框,
大体图



很急,很急
搜索更多相关主题的帖子: 复选 节点 treeview 
2007-06-04 09:12
飙马
Rank: 5Rank: 5
来 自:马里亚纳
等 级:贵宾
威 望:15
帖 子:779
专家分:280
注 册:2007-3-28
得分:0 
我觉得你这个更多的是涉及数据库的问题。
用循环判定TREEVIEW2的TreeNode的CheckBox是否为True,然后提交到数据库的表中。

IT精英如同彩票:平凡的人像5块也中不到一样普遍,努力一点你中了5元保了个本。奖金越高,机率也就越小,付出的也越多,盖茨如同500万一样稀有。虽然每天忙碌而平凡,但我努力成为精英,做梦中了500万。
2007-06-04 09:34
abcfei
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-4-10
得分:0 
老大,能不能给个示列代码.我好参考一下呀.我也大体知道循环判定TREEVIEW2的TreeNode的CheckBox是否为True,然后取节点名字,提交到数据库的表中
但代码怎么写呢.谢谢呀
2007-06-06 15:23
飙马
Rank: 5Rank: 5
来 自:马里亚纳
等 级:贵宾
威 望:15
帖 子:779
专家分:280
注 册:2007-3-28
得分:0 
当列表控件选中当前Node时,来刷新子项与父项状态
Private Sub tvwMenuList_AfterCheck(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs)
CheckNode(e.Node)
End Sub

Private Sub CheckNode(ByRef node As TreeNode)
If Not Checking Then
Checking = True
Dim CheckedNode As TreeNode = node

Dim checked As Boolean = CheckedNode.Checked

If checked Then
If CheckedNode.Nodes.Count > 0 Then
ChildNodeCheck(CheckedNode, checked)
'CheckedNode.BackColor = Color.White
End If
If CheckedNode.FullPath.ToString.Split("\").Length > 1 Then
CheckParentNode(CheckedNode.Parent, checked)
End If
Checking = False
Else
If CheckedNode.Nodes.Count > 0 Then
ChildNodeCheck(CheckedNode, checked)
'CheckedNode.BackColor = Color.White
End If
If CheckedNode.FullPath.ToString.Split("\").Length > 1 Then
CheckParentNode(CheckedNode.Parent, checked)
End If
Checking = False
End If
End If
End Sub

Private Sub ChildNodeCheck(ByVal node As TreeNode, ByVal checked As Boolean)
Dim _node As TreeNode

For Each _node In node.Nodes
_node.Checked = checked
'_node.BackColor = Color.White
If _node.Nodes.Count > 0 Then
ChildNodeCheck(_node, checked)
End If
Next
End Sub

Private Sub CheckParentNode(ByVal node As TreeNode, ByVal checked As Boolean)
Dim _node As TreeNode
Dim _full, _empty As Integer
For Each _node In node.Nodes
If _node.Checked Then
_full = _full + 1
Else
_empty = _empty + 1
End If
Next

If checked Then
If _full = node.Nodes.Count Then
node.Checked = checked
'node.BackColor = Color.White
If node.FullPath.ToString.Split("\").Length > 1 Then
CheckParentNode(node.Parent, checked)
End If
Exit Sub
Else
node.Checked = checked
'node.BackColor = Color.Red
If node.FullPath.ToString.Split("\").Length > 1 Then
ParentNodeCheck(node.Parent, checked)
End If
Exit Sub
End If
Else
If _empty = node.Nodes.Count Then
node.Checked = checked
'node.BackColor = Color.White
If node.FullPath.ToString.Split("\").Length > 1 Then
CheckParentNode(node.Parent, checked)
End If
Exit Sub
Else
node.Checked = Not checked
'node.BackColor = Color.Red
If node.FullPath.ToString.Split("\").Length > 1 Then
ParentNodeCheck(node.Parent, Not checked)
End If
Exit Sub
End If
End If

End Sub

Private Sub ParentNodeCheck(ByVal node As TreeNode, ByVal checked As Boolean)
node.Checked = checked
'node.BackColor = Color.Red
If node.FullPath.ToString.Split("\").Length > 1 Then
ParentNodeCheck(node.Parent, checked)
End If
End Sub

IT精英如同彩票:平凡的人像5块也中不到一样普遍,努力一点你中了5元保了个本。奖金越高,机率也就越小,付出的也越多,盖茨如同500万一样稀有。虽然每天忙碌而平凡,但我努力成为精英,做梦中了500万。
2007-06-06 15:44
飙马
Rank: 5Rank: 5
来 自:马里亚纳
等 级:贵宾
威 望:15
帖 子:779
专家分:280
注 册:2007-3-28
得分:0 
可以用checkNode与selectnode结合起来用:在AfterCheck事件中只允许选中一个节点即如果已经选中大于一个就把前面的有打勾去掉改为后来的节点选中;在AfterSelect事件是将选中节点打勾,其它清除即可;
bool bl = e.Node.Checked;
for(int i=0;i<tvTable.Nodes.Count;i++)
{
tvTable.Nodes[i].Checked = false;
}
e.Node.Checked = bl;

IT精英如同彩票:平凡的人像5块也中不到一样普遍,努力一点你中了5元保了个本。奖金越高,机率也就越小,付出的也越多,盖茨如同500万一样稀有。虽然每天忙碌而平凡,但我努力成为精英,做梦中了500万。
2007-06-06 15:44
abcfei
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-4-10
得分:0 

谢谢老大了,
可是我做的是C#
上面那个
代码是VB.NET的,我有点看不
懂,呵呵.
不过还是有很大启发的.我去试试.

2007-06-07 08:32
飙马
Rank: 5Rank: 5
来 自:马里亚纳
等 级:贵宾
威 望:15
帖 子:779
专家分:280
注 册:2007-3-28
得分:0 
这方面代码挺少的,虽然是VB,但你可以参考参考它对Node、Check的使用,希望对你有帮助!

[此贴子已经被作者于2007-6-7 8:39:38编辑过]



IT精英如同彩票:平凡的人像5块也中不到一样普遍,努力一点你中了5元保了个本。奖金越高,机率也就越小,付出的也越多,盖茨如同500万一样稀有。虽然每天忙碌而平凡,但我努力成为精英,做梦中了500万。
2007-06-07 08:39
logzzsd
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-6-7
得分:0 

能不能在AfterCheck事件中,判断当前选中的CheckBox是否为True,然后分别存入不同的数组,保存时一起提交
private void treeView2_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{

if(e.Node.Checked)
{
if(!arrTrue.Contains(e.Node.Text))
{
arrTrue.Add(e.Node.Text);
}
}
else
{
if(!arrFalse.Contains(e.Node.Text))
{
arrFalse.Add(e.Node.Text);
}
}
}

2007-06-07 10:01
limeiping
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-1-31
得分:0 
解决了吗,我也想如何实现的呢.
2007-07-08 07:22
limeiping
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-1-31
得分:0 
发一份你的代码给我参考一下呀.cqlmp@yahoo.com.cn我也现在也要实现这个功能.
2007-07-08 07:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-144665-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.628511 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved