C# win treeview如何获取check选中的值? Treeview是绑定数据的
我自己用了两种方法,都不能完全取出数据。(treeview是三级结构的)一种是用tree.nodes取集合然后循环,一种是tree.nodes[0].nodes[I]循环...
我自己用了两种方法,都不能完全取出数据。(treeview是三级结构的)
一种是用tree.nodes取集合然后循环,一种是tree.nodes[0].nodes[I]循环可以取,但不能取全,发现tree.nodes只能获取一级与二级结构的,三级结构集合数据为0下面是截图,求解,感激不尽!
方法一:
foreach (TreeNode node in tree_group.Nodes)
if (node.Checked)
(将数据添加至数据库)
方法二:
for (int i = 0; i < tree_right.Nodes[0].Nodes.Count; i++)
if (tree_right.Nodes[0].Nodes[i].Checked)
(将父级数据添加至数据库)
for (int j = 0; j < tree_right.Nodes[0].Nodes[i].Nodes.Count; j++)
if (tree_right.Nodes[0].Nodes[i].Nodes[j].Checked)
(将子级数据添加至数据库) 展开
一种是用tree.nodes取集合然后循环,一种是tree.nodes[0].nodes[I]循环可以取,但不能取全,发现tree.nodes只能获取一级与二级结构的,三级结构集合数据为0下面是截图,求解,感激不尽!
方法一:
foreach (TreeNode node in tree_group.Nodes)
if (node.Checked)
(将数据添加至数据库)
方法二:
for (int i = 0; i < tree_right.Nodes[0].Nodes.Count; i++)
if (tree_right.Nodes[0].Nodes[i].Checked)
(将父级数据添加至数据库)
for (int j = 0; j < tree_right.Nodes[0].Nodes[i].Nodes.Count; j++)
if (tree_right.Nodes[0].Nodes[i].Nodes[j].Checked)
(将子级数据添加至数据库) 展开
1个回答
展开全部
你这种做法是不对的
你需要的是递归 /// <summary>
/// 获得所有被选中的节点
/// </summary>
/// <param name="Nodes">节点集合</param>
private bool GetTargetNode(TreeNodeCollection Nodes)
{
bool success=true;
foreach (TreeNode TN in Nodes)
{
if (TN.Checked)
{
//保存数据你想要的数据到数据库
if (保存失败)
{
success=false;
break;
}
}
success=GetTargetNode(TN.Nodes);
if(!success)
break;
}
return success;
}
调用
if(GetTargetNode(treeView1.Nodes))
成功
else
失败
你需要的是递归 /// <summary>
/// 获得所有被选中的节点
/// </summary>
/// <param name="Nodes">节点集合</param>
private bool GetTargetNode(TreeNodeCollection Nodes)
{
bool success=true;
foreach (TreeNode TN in Nodes)
{
if (TN.Checked)
{
//保存数据你想要的数据到数据库
if (保存失败)
{
success=false;
break;
}
}
success=GetTargetNode(TN.Nodes);
if(!success)
break;
}
return success;
}
调用
if(GetTargetNode(treeView1.Nodes))
成功
else
失败
追问
不行,我试了下。treeView1.Nodes的值为0,而且你上面写的方法返回类型是bool型,但最后没有给返回值,这个报错了,我给了个true,执行还是有问题没有保存到数据库里面去
追答
1.treeView1.Nodes是0 说明你调用的时候没对Tree里面没数据
2.返回Bool还是什么是由你自己定的,不是一定要返回bool,根据你的实际情况自己修改你需要的返回值,我只是写个例子,没有测试的哈!
3.数据没有保存成功,可能是你保存的方法有问题
4.我不知道你的具体情况,有什么问题需要你自己解决的,我给你的代码只是参考,能够获取所有已选择的节点,你学习要学会变通哈,不要太死板!
5.根据你的接收能力,我给你该简单点
/// 节点集合
/// 被选中的TreeNode对象集合
private void GetTargetNode(TreeNodeCollection Nodes,List NodesList)
{
foreach (TreeNode TN in Nodes)
{
if (TN.Checked)
Nodes.Add(TN);
GetTargetNode(TN.Nodes)
}
}
调用
List NodesList =new List();
GetTargetNode(treeView1.Nodes,NodesList);
执行完了后
NodesList里面就是这个tree中所有被checked的节点对象了,
剩下的你可以自己去处理了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询