0

私は持っていてSystem.Web.SiteMapProvider、使用してすべてのツリー(ノード)を取得しますproviderSiteMap.RootNode.ChildNodes

からRootNodeの子ノードの場合、最後のノードを(最初のアイテムとして)一番上に移動します。

ChildNodes: N1, N2, ... N9, N10 

最後のノード N10 を移動したい:

ChildNodes: N10, N1, N2, ...N9 

私はこれを試します:

        var providerSiteMap = GetProviderSiteMap(sRoles);
        var dSource = new SiteMapDataSource { Provider = providerSiteMap };
        var nodeList = providerSiteMap.GetChildNodes(providerSiteMap.RootNode);

        var listaNodos = new List<SiteMapNode>();
        var item = providerSiteMap.RootNode.ChildNodes.Cast<SiteMapNode>().FirstOrDefault(x => x.Key == "9100");

        providerSiteMap.RootNode.ChildNodes.Cast<SiteMapNode>().ToList().Remove(item);
        providerSiteMap.RootNode.ChildNodes.Cast<SiteMapNode>().ToList().Insert(0, item);


        dSource.DataBind();
        //enlazamos

        TreeView1.DataSource = dSource;
        TreeView1.DataBind();

そして私は試します:

var item = providerSiteMap.RootNode.ChildNodes.Cast().FirstOrDefault(x => x.Key == "9100");

        var t = providerSiteMap.RootNode.ChildNodes.Cast<SiteMapNode>().ToList().Count;
        providerSiteMap.RootNode.ChildNodes.Cast<SiteMapNode>().ToList().Remove(item);
        t = providerSiteMap.RootNode.ChildNodes.Cast<SiteMapNode>().ToList().Count;
        providerSiteMap.RootNode.ChildNodes.Cast<SiteMapNode>().ToList().Insert(0, item);

ToList().Count前後同じですRemove(item)

そして私は試します:

 var item = providerSiteMap.RootNode.ChildNodes.Cast<SiteMapNode>().FirstOrDefault(x => x.Key == "9100");
 var t = providerSiteMap.RootNode.ChildNodes.Count;
 providerSiteMap.RootNode.ChildNodes.Remove(item);
 t = providerSiteMap.RootNode.ChildNodes.Count;
 providerSiteMap.RootNode.ChildNodes.Insert(0, item);
 t = providerSiteMap.RootNode.ChildNodes.Count;

実行しようとするとCollection is read-onlyエラーが発生しますproviderSiteMap.RootNode.ChildNodes.Remove(item);

助言がありますか?

4

1 に答える 1

0

私はこれを試します:

        var providerSiteMap = GetProviderSiteMap(sRoles);
        var dSource = new SiteMapDataSource { Provider = providerSiteMap };
        var nodeList = providerSiteMap.GetChildNodes(providerSiteMap.RootNode);

        var listaNodos = new List<SiteMapNode>();
        var item = providerSiteMap.RootNode.ChildNodes.Cast<SiteMapNode>().FirstOrDefault(x => x.Key == "9100");

        List<SiteMapNode> children2 = new List<SiteMapNode>(providerSiteMap.RootNode.ChildNodes.Cast<SiteMapNode>());

        var t = children2.Count;
        children2.Remove(item);
        t = children2.Count;
        children2.Insert(0, item);
        t = children2.Count;

        var nodesChildren = new SiteMapNodeCollection(children2.ToArray());
        providerSiteMap.RootNode.ChildNodes = nodesChildren;

        // refresh ??
        providerSiteMap.GetChildNodes(providerSiteMap.RootNode);
于 2015-09-22T07:00:23.487 に答える