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