Zack Peterson
그는 물었다 12년 전
1

어떻게 제거합니까 노드입니다 사이테마프노데콜레스티온 에서?

39, '모든' ve got a 중계기 i& 나열하는 웹스시테마프 협력하였습니다 호출이네요 자식 페이지 (ASP.NET) '' 있다 '는 DataSource 사이테마프노데콜레스티온'. 하지만, 난 내 맞춰찍기 양식 페이지가 무산되었다 저기예요 don& # 39, 된 것입니다.

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

던지는 방법은 사이테마프노데콜레스티온드레모프 () 는 '이'

&gt. 노스럽포르테데스세페시옹: 컬렉션은 read-only&quot ";).

어떻게 제거합니까 컬렉션에서 노드입니다 다트라빈딩 전에 반복?

답변 3 개

39 너회의 shouldn& 스티페 필요한 건 아니다.

Dim children = _
    From n In SiteMap.CurrentNode.ChildNodes.Cast(Of SiteMapNode)() _
    Where n.Url <> "/Registration.aspx" _
    Select n

Linq 와 닷넷 (.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 

Linq, 없이 사용하지만 닷넷 (.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 )

39 의 항목 제거 등 that& 충스러웠으니 컬렉션을 위해 항상 느립니다. # 39 you& 않는 한, re, re going to be 루프을 you& 통해 여러 번 # 39 더 나은 끄기도구 필터링합니다.

나는 attaboy 작동하도록 코드 (아래 참조).

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

39 는 더 나은 방법이 있을 수 없다 ',' 스티페 () 를 사용해야 하는 don& 어디서?

또한, 이 아이들에게 시스템스콜레스티온s.진리c리누머이블 한 세트 ' (객체)'. 뭔가 좋은 방법이 없다는 것 (의 시스템.웹스시테마프노데) '또는' 시스템스콜레스티온s.진리c리누머이블 물러서요 입력되었는지 더욱 더 강하게 'a' 시스템.웹스시테마프노데콜레스티온?