I've punya Repeater yang berisi daftar semua web.sitemapanak halaman pada ASP.NET halaman. Yang
sumber dataadalah
SiteMapNodeCollection`. Tapi, saya don't ingin saya formulir pendaftaran halaman untuk muncul di sana.
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
The SiteMapNodeCollection.Hapus()
metode melempar
NotSupportedException: "Koleksi hanya-baca".
Bagaimana saya bisa menghapus node dari koleksi sebelum Penyatuan data Repeater?
Menggunakan Linq dan .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
Tanpa Linq, tapi menggunakan .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 )
Hindari menghapus item dari koleksi yang's selalu lambat. Kecuali anda're akan perulangan melalui beberapa kali anda're baik dari penyaringan.
Aku punya itu untuk bekerja dengan kode di bawah ini:
Dim children = From n In SiteMap.CurrentNode.ChildNodes _
Where CType(n, SiteMapNode).Url <> "/Registration.aspx" _
Select n
RepeaterSubordinatePages.DataSource = children
Apakah ada cara yang lebih baik di mana saya don't harus menggunakan CType()
?
Juga, ini set anak ke Sistem.Koleksi.Generic.IEnumerable(Objek)
. Apakah ada cara yang baik untuk mendapatkan kembali sesuatu yang lebih kuat diketik seperti Sistem.Koleksi.Generic.IEnumerable(Dari Sistem.Web.SiteMapNode)
atau bahkan lebih baik Sistem.Web.SiteMapNodeCollection
?