Jak mohu odstranit uzly z SiteMapNodeCollection?

hlasů
1

Mám tablo, které jsou uvedeny všechny web.sitemappodřízené stránky na stránce ASP.NET. Jeho DataSourceje SiteMapNodeCollection. Ale nechci, můj registrační formuláře, se ukázat tam.

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

SiteMapNodeCollection.Remove()Způsob hodí

NotSupportedException: „Sbírka je jen pro čtení“.

Jak mohu před Databinding tablo odstranit uzel z kolekce?

Položena 15/08/2008 v 15:38
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
1

Váš neměli potřebovat CType

Dim children = _
    From n In SiteMap.CurrentNode.ChildNodes.Cast(Of SiteMapNode)() _
    Where n.Url <> "/Registration.aspx" _
    Select n
Odpovězeno 15/08/2008 v 16:28
zdroj uživatelem

hlasů
1

Pomocí LINQ 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 

Bez LINQ, avšak za použití .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 )

Vyhnout odebrání položek ze sbírek jako je to vždycky pomalu. Pokud jste bude průchozí vícekrát budete lépe filtrování.

Odpovězeno 15/08/2008 v 15:44
zdroj uživatelem

hlasů
0

Mám to do práce s kódem níže:

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

Existuje lepší způsob, kde nemám používat CType()?

Také tento nastaví děti k System.Collections.Generic.IEnumerable(Of Object). Je tam dobrý způsob, jak získat zpět něco silněji zadali jako když System.Collections.Generic.IEnumerable(Of System.Web.SiteMapNode)či dokonce Lepší System.Web.SiteMapNodeCollection?

Odpovězeno 15/08/2008 v 16:25
zdroj uživatelem

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