Hogyan távolítható el a csomópontok egy SiteMapNodeCollection?

szavazat
1

Van egy átjátszó, amely felsorolja az összes web.sitemapgyermek lapok egy ASP.NET oldalon. A DataSourcejelentése SiteMapNodeCollection. De én nem akarom, hogy a regisztrációs űrlapot az oldalon megjelenik ott.

Dim Children As SiteMapNodeCollection = SiteMap.CurrentNode.ChildNodes

'remove registration page from collection
For Each n As SiteMapNode In SiteMap.CurrentNode.ChildNodes
If n.Url = /Registration.aspx Then
    Children.Remove(n)
End If
Next

RepeaterSubordinatePages.DataSource = Children

A SiteMapNodeCollection.Remove()módszer dob egy

NotSupportedException: „Collection csak olvasható”.

Hogyan távolítható el a csomópontot a gyűjteményt, mielőtt DataBinding az átjátszó?

A kérdést 15/08/2008 13:38
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
1

Használata Linq és a .NET 3.5:

//this will now be an enumeration, rather than a read only collection
Dim children = SiteMap.CurrentNode.ChildNodes.Where( _
    Function (x) x.Url <> "/Registration.aspx" )

RepeaterSubordinatePages.DataSource = children 

Anélkül Linq, de Net 2:

Function IsShown( n as SiteMapNode ) as Boolean
    Return n.Url <> "/Registration.aspx"
End Function

...

//get a generic list
Dim children as List(Of SiteMapNode) = _
    New List(Of SiteMapNode) ( SiteMap.CurrentNode.ChildNodes )

//use the generic list's FindAll method
RepeaterSubordinatePages.DataSource = children.FindAll( IsShown )

Kerülje az elemek eltávolításával gyűjteményekből, mint mindig lassú. Hacsak nem lesz átkötése többször te jobb szűrés.

Válaszolt 15/08/2008 13:44
a forrás felhasználó

szavazat
0

Megvan dolgozni alábbi kódot:

Dim children = From n In SiteMap.CurrentNode.ChildNodes _
               Where CType(n, SiteMapNode).Url <> "/Registration.aspx" _
               Select n
RepeaterSubordinatePages.DataSource = children

Van egy jobb módja, ahol nem kell használni a CType()?

Továbbá, ez határozza meg a gyerekek egy System.Collections.Generic.IEnumerable(Of Object). Van egy jó módja annak, hogy újra valami erősen típusos, mint egy System.Collections.Generic.IEnumerable(Of System.Web.SiteMapNode), vagy még jobb egy System.Web.SiteMapNodeCollection?

Válaszolt 15/08/2008 14:25
a forrás felhasználó

szavazat
1

Ön nem kell ctype

Dim children = _
    From n In SiteMap.CurrentNode.ChildNodes.Cast(Of SiteMapNode)() _
    Where n.Url <> "/Registration.aspx" _
    Select n
Válaszolt 15/08/2008 14:28
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more