3个回答
展开全部
一个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 ;
直接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 ;
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2018-04-26
展开全部
foreach (TreeNode node in trvBarCode.Nodes[0].Nodes[bb])
{
MessageBox.Show(node.Text.tostring());
}
大概是这意思吧,语法忘记了
{
MessageBox.Show(node.Text.tostring());
}
大概是这意思吧,语法忘记了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是所有子节点的名称吗?用递归算法。。
追问
知道用递归 不会用 我才学没几天
追答
你取得了名称是要怎么用?是只是获取,然后放到List里面?数组里面?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询