For each ...in Asp.net

venerdì 30 novembre 2007 - 23.04

motogpdesmo16 Profilo | Senior Member

Salve a tutti.
Ho la necessità di abilitare/disabilitare tutti gli elementi presenti in una pagina della mia applicazione sviluppata in asp.net 2.0

Poichè sono parecchi oggetti, non penso sia una buona idea abilitarli/disabilitarli elencandoli nella pagina .vb e valorizzando la proprietà enabled a True o False a seconda dei casi.
Pensavo dunque a sfruttare la funzionalità del For Each .... next, per poterli abilitare/disabilitare tutti insieme.

In una WindowsApplication sono solito fare

dim oForm As System.Windows.Forms.Form
For Each oCtrl As System.Windows.Forms.Control In oForm.Controls
...OPERAZIONI....
Next oCtrl


quale sarebbe l'equivalente di una applicazione web??
Grazie anticipatamente per le eventuali risposte.

alx_81 Profilo | Guru

>Salve a tutti.
Ciao!

>Ho la necessità di abilitare/disabilitare tutti gli elementi
>presenti in una pagina della mia applicazione sviluppata in asp.net
>2.0
>
>Poichè sono parecchi oggetti, non penso sia una buona idea abilitarli/disabilitarli
>elencandoli nella pagina .vb e valorizzando la proprietà enabled
>a True o False a seconda dei casi.
>Pensavo dunque a sfruttare la funzionalità del For Each ....
>next, per poterli abilitare/disabilitare tutti insieme.
Sono tutti allo stesso livello? perchè allora basta fare un foreach simile al tuo dove cambiano i tipi di dato. Però, prima di pensare ad un ciclo. Hai pensato che potresti semplicemente fare un div, un pannello o comunque un container, per poi disabilitare solo quello?

Il ciclo, se tutti gli elementi sono allo stesso livello e non sono dentro altri controlli (altrimenti devi ciclare ricorsivamente, e te lo sconsiglio al massimo), potrebbe essere il seguente:

For Each w As web.UI.Control in Page.Controls ' OPERAZIONI Next

fai attenzione perchè non hai la proprietà enabled, devi castare in base al tipo e poi, eventualmente, impostare l'abilitazione del controllo, ad esempio:

For Each w As Web.UI.Control In Me.Controls If TypeOf (w) Is TextBox Then CType(w, TextBox).Enabled = False End If If TypeOf (w) Is DropDownList Then CType(w, DropDownList).Enabled = False End If '... Next

Cercherei comunque di rimanere sulla soluzione del container, magari un bel Panel

>Grazie anticipatamente per le eventuali risposte.
Di nulla!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

motogpdesmo16 Profilo | Senior Member

Ti ringrazio del chiarimento e del suggerimento (Panel) che purtroppo non posso sfruttare poichè la pagina è abbastanza complessa e piena di elementi (fortunatamente tutti abbastanza omogenei: linkbutton, label, image). Reimpostare tutti gli elementi nel panel mi porterebbe via molto molto tempo.
Sto pertanto seguendo l'abilitazione/disabilitazione in base alla tipologia dell'elemento.

motogpdesmo16 Profilo | Senior Member

Non riesco ad abilitare/disabilitare i controlli da me menzionati:

For Each oCtrl As System.Web.UI.Control In Me.Controls '...operazioni... next oCtrl

in oCtrl ottengo:
{System.Web.UI.LiteralControl}
{System.Web.UI.HtmlControls.HtmlHead}
{System.Web.UI.HtmlControls.HtmlForm}

non vado a puntare alle label/textbox contenute di fatti nella mia pagina.
Dove sbaglio??
Grazie

alx_81 Profilo | Guru

>Non riesco ad abilitare/disabilitare i controlli da me menzionati:
>
>For Each oCtrl As System.Web.UI.Control In Me.Controls
>'...operazioni...
>next oCtrl
>
>in oCtrl ottengo:
>{System.Web.UI.LiteralControl}
>{System.Web.UI.HtmlControls.HtmlHead}
>{System.Web.UI.HtmlControls.HtmlForm}
>
>non vado a puntare alle label/textbox contenute di fatti nella
>mia pagina.
>Dove sbaglio??
Era proprio quello che ti dicevo. I controlli nella tua pagina aspx sono dentro altri controlli, quindi devi scorrere ogni collezione controls degli oggetti che li contengono. Invece che usare:

For Each oCtrl As System.Web.UI.Control In Me.Controls '...operazioni... next oCtrl

scorri la collezione dei controlli della form:

For Each oCtrl As System.Web.UI.Control In Me.Form.Controls '...operazioni... Next oCtrl

ma sii consapevole che questo ciclo ti ricava solo i primi figli della form. Se vuoi andare all'interno, devi fare una funzione che ricorsivamente scorre tutti i livelli in cui i controlli possono esistere.
Per questo, credo che mettere un panel in testa a tutto sia la soluzione megliore in termini di prestazioni.

>Grazie
Di nulla!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5