c#代码为树视图控件添加子节点而不循环



我写了一个代码来动态创建树和子节点,但是添加子节点需要很长时间,因为代码循环遍历每个项目,然后创建子树节点,是否有任何方法一次添加所有子节点?

            TreeNode TreeNodeDatabase = new TreeNode();
            TreeNodeDatabase.Text = "Database";
            TreeNodeDatabase.Value = "Database";
            TreeNodeDatabase.Expanded = false;
            TreeView1.Nodes.Add(TreeNodeDatabase);
            //Table
            TreeNode TreeNodeTables = new TreeNode();
            TreeNodeTables.Text = "Table";
            TreeNodeTables.Value = "Table";
            TreeNodeTables.Expanded = false;
            TreeNodeDatabase.ChildNodes.Add(TreeNodeTables);
            //Now Add Child Nodes to Table
            DataSet ds = new DataSet();
            HandleDB db = new HandleDB();
            ds = db.returnData("select top 1 name from sys.tables", srvr, dbname);             
            int i = 0;
            for (i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                TreeNode TreeNodeTableName = new TreeNode();
                TreeNodeTableName.Text = ds.Tables[0].Rows[i][0].ToString();
                TreeNodeTableName.Value = ds.Tables[0].Rows[i][0].ToString();
                TreeNodeTableName.Expanded = false;
                TreeNodeTables.ChildNodes.Add(TreeNodeTableName);
            }

除非有理由在初始加载期间加载整个树视图,否则您应该按需加载

最简单的方法是:

  1. 按逻辑级别加载所有节点(根节点+所有子节点)。
  2. 存储每个节点的标识符和节点类型。(你可以给一个对象添加一个指针来描述每个节点和标识信息)。
  3. 创建一个函数,该函数将加载节点的直接继承人(您将需要在每个节点级别上加载一个节点,但不是组织级节点)。
  4. 对于每个节点,当单击时,确定它是否有子节点,如果没有加载子节点并应用元数据(这里最好在你的元数据对象上有一个属性,如HasBeenLoaded,这样你就不会在单击时对没有子节点进行重复的子加载调用)。

TreeView有一个Nodes TreeNodeCollection。你可以这样写。

TreeView1.Nodes.AddRange ([yourtreenodecollection])

您仍然需要通过构建一个新的TreeNodeCollection来进行一些循环,但这将提供比手动将每个TreeNode添加到Tree更好的性能。似乎没有一种显式的方式将TreeView绑定到数据库。

最新更新