没想到给treeview赋值这么麻烦
还要用递归
不想多说,直接上代码
var dgvTree = e.Control as DataGridViewTreeViewEditingControl;
var items = _presenter.GetPtTree();
//得到所有父节点为null的形成的数组
var rows = items.Where(w => w.PID == "");
if (dgvTree == null) return;
dgvTree.TreeView.Nodes.Clear();
//遍历根节点数组
foreach (var row in rows)
{
var tmpNd = new TreeNode { Name = row.ID, Text = row.Term };
//给根节点赋值
//将节点加入到树中
dgvTree.TreeView.Nodes.Add(tmpNd);
//递归加入此根节点的子节点
_presenter.InitTreeView(tmpNd.Nodes, tmpNd.Name, items);
}
presenter中的方法
/// <summary>
/// 初始化treeview
/// </summary>
/// <param name="nodes">节点集合</param>
/// <param name="pid">父id</param>
/// <param name="items">读取的数据库内容</param>
public void InitTreeView(TreeNodeCollection nodes, string pid, List<TreeItem> items)
{
var service = WorkItem.RootWorkItem.Services.Get<IResourceDescService>();
service.InitTreeView(nodes, pid, items);
}
服务中的递归方法
public void InitTreeView(TreeNodeCollection treeNodeCollection, string p, List<TreeItem> items)
{
//取得以此节点为父节点的数据行
var rows = items.Where(w => w.PID == p);
foreach (var row in rows)
{ //给根节点赋值
var tmpNd = new TreeNode { Name = row.ID, Text = row.Term };
//将节点加入到树中
treeNodeCollection.Add(tmpNd);
//递归加入此节点的子节点
InitTreeView(tmpNd.Nodes, tmpNd.Name, items);
}
}
以上 就可以将ID TERM PID 结构的数据赋值给treeview了
然后再来个买一送一
树节点赋值这么麻烦,怎么吧一棵树的值付给另一棵树呢,难道还要循环读出循环写入
不用不用,这样写~~~
TreeView tv1=new TreeView();
TreeView tv2=new TreeView();
tv2.Nodes.Add((TreeNode)tv1.Nodes[0].Clone());