数据模型为:id、文本、父亲id
创建TreeView: TreeView treeV = new TreeView();
绑定根目录:
this.TreeV.Nodes.Clear();//清空节点
TreeV_M.LabelEdit = false;//不可编辑
//添加根结点
TreeNode root = new TreeNode();
root.Text = "学生管理系统";
TreeV.Nodes.Add(root);
创建树节点模型:
public class TreeNodeText
{
public int id { get; set; }
public string text { get; set; }
public int parentId { get; set; }
}
定义list集合存储树节点模型数据:
List<TreeNodeText> tree = new List<TreeNodeText>();
将数据全部添加进 tree中。
调用 CreateChildNode(root, 0);递归加载节点
private void CreateChildNode(TreeNode parentNode, int parentId)
{
//找到该节点下的子项(父节点值等于该节点编号)
var nodes = from list in this.tree
where list.parentId.Equals(parentId)
select list;
//创建该节点子节点
foreach (var item in nodes)
{
TreeNode node = new TreeNode();
node.Text = item.text;
//父节点添加子节点
parentNode.Nodes.Add(node);
//调用自身:递归
CreateChildNode(node, item.id);
}
}
对于采用非主线程加载的,可以使用委托来进行绑定:
在线程函数中添加://递归委托实现树
Action bindtree=() =>
{
CreateChildNode(root, 0);
TreeV_M.Nodes[0].Expand(); //展开一级目录
};
TreeV_M.BeginInvoke(bindtree);