将SiteMapNode移到列表顶部

时间:2015-09-18 11:26:33

标签: c# nodes sitemapprovider

我有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 =&gt; x.Key ==&#34; 9100&#34;);

        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().CountRemove(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;

当我尝试执行providerSiteMap.RootNode.ChildNodes.Remove(item);

时,我收到 集合是只读的 错误

有什么建议吗?

1 个答案:

答案 0 :(得分: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);