c#代码为树视图控件添加子节点而不循环
本文关键字:子节点 循环 添加 控件 代码 视图 | 更新日期: 2023-09-27 18:13:21
我写了一个代码来动态创建树和子节点,但是添加子节点需要很长时间,因为代码循环遍历每个项目,然后创建子树节点,是否有任何方法一次添加所有子节点?
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);
}
除非有理由在初始加载期间加载整个树视图,否则您应该按需加载。
最简单的方法是:
- 按逻辑级别加载所有节点(根节点+所有子节点)。
- 存储每个节点的标识符和节点类型。(你可以给一个对象添加一个指针来描述每个节点和标识信息)。
- 创建一个函数,该函数将加载节点的直接继承人(您将需要在每个节点级别上加载一个节点,但不是组织级节点)。
- 对于每个节点,当单击时,确定它是否有子节点,如果没有加载子节点并应用元数据(这里最好在你的元数据对象上有一个属性,如HasBeenLoaded,这样你就不会在单击时对没有子节点进行重复的子加载调用)。
TreeView有一个Nodes TreeNodeCollection。你可以这样写。
TreeView1.Nodes.AddRange ([yourtreenodecollection])
您仍然需要通过构建一个新的TreeNodeCollection来进行一些循环,但这将提供比手动将每个TreeNode添加到Tree更好的性能。似乎没有一种显式的方式将TreeView绑定到数据库。