c# 在treeview中 获取所有子节点的名称

- aa - bb - cc - dd 例如 如何获取cc 和dd的名称
2024-11-13 08:59:38
推荐回答(3个)
回答1:

一个SQL就可以搞定的;
直接SQL写递归算法;
但是需要一个根节点的哈;

我简单写了一个Demo,思路就是这样的:
DataTable dt = bf.ExecuteTable(strSql); //strSql 就写一个存储过程,然后取出你需要的节点数据
TreeNodeCollection TreeNodeCol = new TreeNodeCollection();
TreeNodeCol = GetAllTreeNode(TreeNodeCol, -1, dt);
//加载到树
foreach (TreeNode node in TreeNodeCol)
{
YourTreeViewID.Nodes.Add(node);
}

//递归方法
private TreeNodeCollection GetAllTreeNode(TreeNodeCollection Nodes, int fid, DataTable dt)
{
TreeNode node; //递归寻找子节点
DataRow[] rows = dt.Select("fid=" + fid);
foreach (DataRow row in rows)
{
node = new TreeNode();
node.Value = row["id"].ToString(); //ID 对应Value
node.Text = row["mc"].ToString(); //名称 对应 Text
node.Target = "YourTreeName";
Nodes.Add(node);
GetAllTreeNode(node.ChildNodes, Convert.ToInt32(node.Value), dt);
}
return Nodes;
}

帮人帮到底,我把SQL也跟你简单写一个吧:
WITH CET ( id, fid,mc )AS
(
SELECT id ,fid,mc
FROM YourTableName --你的数据表
WHERE id = @YourRootId --你的根节点

UNION ALL

SELECT t.id ,t.fid,t.mc
FROM YourTableName t --你的数据表
JOIN CET ct ON t.fid = ct.id
)
SELECT * FROM CET ;

回答2:

foreach (TreeNode node in trvBarCode.Nodes[0].Nodes[bb])
{
MessageBox.Show(node.Text.tostring());
}
大概是这意思吧,语法忘记了

回答3:

是所有子节点的名称吗?用递归算法。。