访问foreach循环中的TreeView节点

本文关键字:TreeView 节点 foreach 循环 访问 | 更新日期: 2023-09-27 17:57:32

我有一个tree view,我使用服务器端方法从DB中获取值来填充它。

tree view已填充并运行良好。

我试图访问foreach循环中的Tree View节点,但令我惊讶的是,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

我是否以正确的方式在树视图节点之间进行迭代?

请专家到这里来指导。

问候

Anurag

访问foreach循环中的TreeView节点

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