foreach循环内访问的TreeView节点 [英] Access TreeView nodes inside a foreach loop

查看:133
本文介绍了foreach循环内访问的TreeView节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个树视图,我正在使用服务器端方法从数据库中取值填充。

树视图被填充和正常工作。

我试图访​​问的foreach 循环内的树视图节点,但让我惊讶的是, count属性显示为1的值。

PFB的​​codeS:

 公共无效PopulateTreeView()
        {
                DataSet的DS =新的DataSet();
                数据表dtUltimateParent = GetUltimateParent();
                数据表DTA =的getParent();
                数据表DTB =的GetChildren();
                DataTable的DT1 =新的DataTable();
                数据表DT2 =新的DataTable();
                数据表DT3 =新的DataTable();
                DT1 = dtUltimateParent.Copy();
                DT2 = dtA.Copy();
                DT3 = dtB.Copy();
                ds.Tables.Add(DT1);
                ds.Tables.Add(DT2);
                ds.Tables.Add(DT3);
                ds.Relations.Add(FirstHierarchy,dt1.Columns [ultimateParentID],dt2.Columns [PARENTID]);
                ds.Relations.Add(SecondHierarchy,dt2.Columns [PARENTID],dt3.Columns [childID的]);
                如果(ds.Tables [0] .Rows.Count大于0)
                {
                    TreeView1.Nodes.Clear();
                    的foreach(DataRow的ultimateRow在ds.Tables [0] .Rows)
                    {
                        树节点ultimateNode =新的TreeNode((串)ultimateRow [ultimateParentText],Convert.ToString(ultimateRow [ultimateParentID]));
                        TreeView1.Nodes.Add(ultimateNode);
                        ultimateNode.Expanded =真;
                        ultimateNode.SelectAction = TreeNodeSelectAction.None;
                        的foreach(的DataRow masterRow在ultimateRow.GetChildRows(FirstHierarchy))
                        {
                            树节点masterNode =新的TreeNode((串)masterRow [ParentText],Convert.ToString(masterRow [PARENTID]));
                            ultimateNode.ChildNodes.Add(masterNode);
                            masterNode.Value = Convert.ToString(masterRow [PARENTID]);
                            masterNode.Expanded = FALSE;
                            masterNode.SelectAction = TreeNodeSelectAction.None;
                            的foreach(的DataRow childRow在masterRow.GetChildRows(SecondHierarchy))
                            {
                                树节点childNode =新的TreeNode((串)childRow [ChildText],Convert.ToString(childRow [childID的]));
                                masterNode.ChildNodes.Add(childNode);
                                childNode.Value = Convert.ToString(childRow [孩子]);
                            }
                        }
                    }
                }
            }

现在,我尝试使用的foreach 循环像下面访问节点:

 的String [] myArray的=具有节点的文本数组
的foreach(在TreeView1.Nodes TreeNode的节点)
{
    的foreach(在myarray的字符串s)
    {
     如果(S == node.Text)
     {
      node.checked = TRUE;
     }
   }
}

TreeView1.Nodes 只显示其中一个是节点全部,也为TreeView1 .Nodes.Count 当属1,但整棵树的观点是人口,是pretty可见。

树视图是一样的东西:

 所有
  一个
    A1
    a2
  乙
    B1
    B2

我在做正确的方式来遍历树视图节点之间?

专家请指导在这里。

问候

阿努拉格


解决方案

 所有
  一个
    A1
    a2
  乙
    B1
    B2TreeView1.Nodes //这说明上层...访问下的所有节点

你应该使用

  TreeView1.Nodes [0] .Nodes //这将显示所有在那意味着节点

A和B ......所以纠正你的code这样

  TreeView1.Nodes [0] .Nodes [0] .Nodes ....... A1和A2

I have a tree view, which I'm populating using a server side method taking values from the DB.

The tree view gets populated and works fine.

I'm trying to access the Tree View nodes inside a foreach loop, but to my surprise, the count property shows value as 1.

PFB the codes:

public void PopulateTreeView()
        {
                DataSet ds = new DataSet();
                DataTable dtUltimateParent = GetUltimateParent();
                DataTable dtA = GetParent();
                DataTable dtB = GetChildren();
                DataTable dt1 = new DataTable();
                DataTable dt2 = new DataTable();
                DataTable dt3 = new DataTable();
                dt1 = dtUltimateParent.Copy();
                dt2 = dtA.Copy();
                dt3 = dtB.Copy();
                ds.Tables.Add(dt1);
                ds.Tables.Add(dt2);
                ds.Tables.Add(dt3);
                ds.Relations.Add("FirstHierarchy", dt1.Columns["ultimateParentID"], dt2.Columns["ParentID"]);
                ds.Relations.Add("SecondHierarchy", dt2.Columns["ParentID"], dt3.Columns["ChildID"]);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    TreeView1.Nodes.Clear();
                    foreach (DataRow ultimateRow in ds.Tables[0].Rows)
                    {
                        TreeNode ultimateNode = new TreeNode((string)ultimateRow["ultimateParentText"], Convert.ToString(ultimateRow["ultimateParentID"]));
                        TreeView1.Nodes.Add(ultimateNode);
                        ultimateNode.Expanded = true;
                        ultimateNode.SelectAction = TreeNodeSelectAction.None;
                        foreach (DataRow masterRow in ultimateRow.GetChildRows("FirstHierarchy"))
                        {
                            TreeNode masterNode = new TreeNode((string)masterRow["ParentText"], Convert.ToString(masterRow["ParentID"]));
                            ultimateNode.ChildNodes.Add(masterNode);
                            masterNode.Value = Convert.ToString(masterRow["ParentID"]);
                            masterNode.Expanded = false;
                            masterNode.SelectAction = TreeNodeSelectAction.None;
                            foreach (DataRow childRow in masterRow.GetChildRows("SecondHierarchy"))
                            {
                                TreeNode childNode = new TreeNode((string)childRow["ChildText"], Convert.ToString(childRow["ChildID"]));
                                masterNode.ChildNodes.Add(childNode);
                                childNode.Value = Convert.ToString(childRow["Child"]);
                            }
                        }
                    }
                }
            }

Now I am trying to access the Nodes using a foreach loop like below:

string[] myArray=an array having the texts of the Nodes
foreach(TreeNode node in TreeView1.Nodes)
{
    foreach(string s in myArray)
    {
     if(s==node.Text)
     {
      node.checked=true;
     }
   }
}

TreeView1.Nodes shows only one node which is 'All', also TreeView1.Nodes.Count comes as 1, but the whole tree view is populated and is pretty visible.

The Tree View is something like:

All
  A
    a1
    a2
  B
    b1
    b2

Am I doing the correct way to iterate amongst the tree view nodes?

Experts please guide over here.

Regards

Anurag

解决方案

All
  A
    a1
    a2
  B
    b1
    b2

TreeView1.Nodes //this shows the upper hierarchy...to access the nodes under All

you should use

TreeView1.Nodes[0].Nodes  //this will show the nodes under All that means

A and B......so correct your code this way

TreeView1.Nodes[0].Nodes[0].Nodes.......a1 and a2

这篇关于foreach循环内访问的TreeView节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆