【问题标题】:asp:TreeView with parent-child relationship in SQLasp:TreeView 与 SQL 中的父子关系
【发布时间】:2013-04-05 15:47:13
【问题描述】:

我写了一些代码:

 protected void RootNodes()
{
    var contents = ListContentRootNodes(0, this.Culture, true);
    foreach (var content in contents)
    {
        TreeNode newNode = new TreeNode
        {
            Value = content.Title
        };

        List<TreeNode> childNode = ChildNode(content.ContentId);
        if (childNode != null)
        {
            foreach (var item in childNode)
            {
                newNode.ChildNodes.Add(item);
            }
            treeView.Nodes.Add(newNode);
        }
        treeView.ExpandAll();
    }
}

protected List<TreeNode> ChildNode(int contentId)
{
    var subContents = ListContentChildNodesAll(contentId, this.Culture);

    List<TreeNode> nodes = new List<TreeNode>();
    foreach (var sub in subContents)
    {
        nodes.Add(new TreeNode { Value = sub.Title });
        ChildNode(sub.ContentId);
    }
    return nodes;
}

'ListContentRootNodes' 返回第一级数据行,其中 'ParentId' 设置为 '-1'ListContentChildNodesAll 调用存储过程:

CREATE PROCEDURE [dbo].[ListChildNodesAll]
@ContentId int,
@Culture nvarchar(5)

AS SET NOCOUNT ON
SELECT * FROM Content WHERE ParentId=@ContentId AND Culture=@Culture

据我在网上搜索,我了解到我需要递归方法来填充 'DB' 中的行,但我无法管理它。我需要创建将表示所有子节点的站点地图。我的代码只返回第一级而不是所有子行。我该如何解决?

【问题讨论】:

    标签: c# recursion treeview


    【解决方案1】:

    我终于找到了解决方案。我完整的工作代码是:

     protected void RootNodes()
    {
        var contents = ListContentRootNodes(0, this.Culture, true);
        foreach (var content in contents)
        {
            TreeNode newNode = new TreeNode { Value = content.Title };
    
            List<TreeNode> childNode = ChildNode(content.ContentId);
            if (childNode != null)
            {
                foreach (var item in childNode)
                {
                    newNode.ChildNodes.Add(item);
                }
                treeView.Nodes.Add(newNode);
            }
            treeView.ExpandAll();
        }
    }
    
    protected List<TreeNode> ChildNode(int contentId)
    {
        var subContents = ListContentChildNodesAll(contentId, this.Culture);
        List<TreeNode> nodes = new List<TreeNode>();
    
        foreach (var sub in subContents)
        {
            TreeNode nod = new TreeNode { Value = sub.Title };
            nodes.Add(nod);
            List<TreeNode> leafNodes = ChildNode(sub.ContentId);
            foreach (var leaf in leafNodes)
            {
                nod.ChildNodes.Add(leaf);
            }
        }
        return nodes;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多