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 回答