1、查找一个节点的所有子节点(借鉴)
private bool FindNode(TreeNode Node)
{
。。。
return true;
}
private void FindAllNodes(TreeNode baseTreeNode)
{
int num = baseTreeNode.Nodes.Count;
TreeNode Node;
for (int i = 0; i < num - 1; i++)
{
Node = baseTreeNode.Nodes[i];
findNode(Node);
if (Node.Nodes.Count > 0)
{
findAllNodes(Node);
}
}
}
调用:FindAllNodes(treeview1.SelectedNode)
2、 /// <summary>
/// 递归通过某个value查找节点
/// </summary>
/// <param name="tnParent"></param>
/// <param name="strValue"></param>
/// <returns></returns>
private TreeNode FindNode(TreeNode tnParent, string strValue)
{
if (tnParent == null) return null;
if (tnParent.Text == strValue)
return tnParent;
TreeNode tnRet = null;
foreach (TreeNode tn in tnParent.Nodes)
{
tnRet = FindNode(tn, strValue);
if (tnRet != null)
break;
}
return tnRet;
}
3、将还有父子节点的List绑定到treeview
/// <summary>
/// 数据库的图层类型绑定到树
/// </summary>
/// <param name="list"></param>
/// <param name="Nds"></param>
/// <param name="parentId"></param>
public void InitTree(List<LayerType> list, TreeNodeCollection Nds, int parentId)
{
TreeNode NewNode;
for (int i = 0; i < list.Count; i++)
{
int id = list[i].TypeID;
if (list[i].ParentID == parentId)
{
NewNode = new TreeNode(list[i].TypeName);
NewNode.Tag = list[i].TypeCode;
Nds.Add(NewNode);
LayerData info = new LayerData();
if (null == NewNode.Tag)
info.TypeId = 0;
else
info.TypeId = int.Parse(NewNode.Tag.ToString());
info.LayerNumber = list[i].TypeID;
info.FullName = NewNode.FullPath;
NewNode.ImageIndex = 0;
NewNode.SelectedImageIndex = 1;
InitTree(list, NewNode.Nodes, id);
// NewNode.ExpandAll();
}
}
}
调用:InitTree(layerTypes, trvType.Nodes, 0);
4、
private void LoadWorkArea()
{
trvcmbWorkArea.Nodes.Clear();
List<WorkArea> workAreas = dataCollection.GetWorkAreas(null);
if (workAreas != null && workAreas.Count > 0)
{
ConditionNode cNode = new ConditionNode();
cNode.IsLeaf = true;
cNode.Name = "GraphId";
cNode.Op = Operation.EQ;
cNode.Value = -999;
Condition condition = new Condition(cNode);
List<Target> targets = dataCollection.GetTargets(condition);
for (int i = 0; i < workAreas.Count; i++)
{
if (workAreas[i].Parentid == 0)
{
TreeNode root = new TreeNode();
root.Text = workAreas[i].Workareaname;
root.Tag = workAreas[i];
trvcmbWorkArea.Nodes.Add(root);
AddTargetNode(root, targets);
if (workAreas.Exists(wa => wa.Parentid == workAreas[i].Workareaid))
{
LoadSubWorkArea(root, workAreas, targets);
}
}
}
trvcmbWorkArea.ExpandAll();
// SelectDefauleTarget();
}
}
/// <summary>
/// 添加成图目标节点
/// </summary>
/// <param name="wNode">工区节点</param>
/// <param name="targets">成图目标集合</param>
private void AddTargetNode(TreeNode wNode, List<Target> targets)
{
int wId = ((WorkArea)wNode.Tag).Workareaid;
//按工区筛选
List<Target> tars = targets.FindAll(t => t.Workareaid == wId);
if (tars != null && tars.Count > 0)
{
for (int i = 0; i < tars.Count; i++)
{
TreeNode node = new TreeNode();
node.Text = tars[i].Targetname;
node.Tag = tars[i];
wNode.Nodes.Add(node);
}
}
}
/// <summary>
/// 加载子工区(递归)
/// </summary>
/// <param name="pNode">父节点</param>
/// <param name="workAreas">工区集合</param>
/// <param name="targets">成图目标集合</param>
private void LoadSubWorkArea(TreeNode pNode, List<WorkArea> workAreas, List<Target> targets)
{
int pId = ((WorkArea)pNode.Tag).Workareaid;
for (int i = 0; i < workAreas.Count; i++)
{
if (workAreas[i].Parentid == pId)
{
TreeNode node = new TreeNode();
node.Text = workAreas[i].Workareaname;
node.Tag = workAreas[i];
pNode.Nodes.Add(node);
AddTargetNode(node, targets);
if (workAreas.Exists(wa => wa.Parentid == workAreas[i].Workareaid))
{
LoadSubWorkArea(node, workAreas, targets);
}
}
}
}