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)
    {
        nodes.Add(new TreeNode { Value = sub.Title });
        ChildNode(sub.ContentId);
    }
    return nodes;
}

'ListContentRootNodes'は、 'ParentId'が'-1'に設定された第 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'から行を移入するには再帰メソッドが必要であることがわかりましたが、それを管理できませんでした。すべてのサブノードが表示されるサイトマップを作成する必要があります。私のコードは、すべての子行ではなく、最初のレベルのみを返します。どのように修正すればよいですか?

4

1 に答える 1

0

私は最終的に解決策を見つけました。私の完全な作業コードは次のとおりです。

 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;
}
于 2013-04-06T09:53:47.997 に答える