访问foreach循环内的TreeView节点

时间:2014-04-08 07:39:47

标签: c# asp.net treeview nodes

我有一个tree view,我使用服务器端方法填充数据库中的值。

tree view已填充并正常工作。

我试图访问Tree View循环中的foreach个节点,但令我惊讶的是,count属性将值显示为1.

PFB代码:

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"]);
                            }
                        }
                    }
                }
            }

现在我尝试使用foreach循环访问节点,如下所示:

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只显示一个节点'All',同时TreeView1.Nodes.Count显示为1,但整个树视图已填充且非常明显。

树视图类似于:

All
  A
    a1
    a2
  B
    b1
    b2

我是否在树视图节点之间进行迭代?

专家请指导。

此致

阿努拉格

1 个答案:

答案 0 :(得分:0)

All
  A
    a1
    a2
  B
    b1
    b2

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

你应该使用

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

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

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