0

すべてのノードを含む SiteMap があります。ナビゲーション用に SiteMap にリンクされている TreeView コントロールを使用しています。ここで、特定のノードが TreeView に表示されないようにします。これを行うことは可能ですか?

4

2 に答える 2

6

はい、もちろん可能です。その方法は、サイトマップ (および他のさまざまな場所) に表示したくないノードにカスタムの "IsPhantom" 属性を追加することです。

<siteMapNode url="~/Welcome.aspx" title="Welcome" description="" isPhantom="true" />

次に、サイトマップ コントロールで、次のコードを使用して、「IsPhantom」属性を持つノードを削除します。

protected void Page_Load(object sender, EventArgs e)
{
    TreeView1.TreeNodeDataBound += new TreeNodeEventHandler(TreeView1_TreeNodeDataBound);              
    SiteMapSource.Provider = this.CurrentProvider;
}

protected void TreeView1_TreeNodeDataBound(object sender, TreeNodeEventArgs e)
{
    SiteMapNode thisMapNode = (SiteMapNode)e.Node.DataItem;
    TreeNode parentTreeNode = e.Node.Parent;

    if (thisMapNode["isPhantom"] != null && thisMapNode["isPhantom"].ToLower().Equals(bool.TrueString.ToLower()) && parentTreeNode != null)
        parentTreeNode.ChildNodes.Remove(e.Node);
}
于 2009-04-22T11:20:52.153 に答える
0

どのような基準に基づいていますか?特定の単一ノードのみを非表示にする場合は、TreeViewのNodeDataBoundイベントをサブスクライブし、アイテム全体(ノード)をVisible=falseに設定します。

これをより良い方法で行い、より柔軟性を提供する必要がある場合は、独自のSiteMapProviderを実装することをお勧めします。次に、サイトマップノードごとにプロパティSh​​owInNavigationを設定し、サイトマップを作成するときにそれを設定できます。

于 2009-04-22T11:00:46.650 に答える