Posts
103
Comments
238
Trackbacks
4
Trovare un controllo nella gerarchia della pagina

Con ASP.NET 2.0 la gerarchia della pagina è molto più frequentemente multilivello di quanto non succedesse con la versione predecende, soprattutto quando si utilizzano le masterpages. Di conseguenza, quando si vuole ottenere un riferimento ad un controllo della pagina dato il suo ID, non è sufficiente utilizzare il metodo FindControl() dell'oggetto Page perchè esso effettua una ricerca solo tra i diretti discendenti della pagina, e non effettua una ricerca ricorsiva all'interno di controlli che a loro volta ne contengono altri.

Per ottenere un riferimento ad un controllo posizionato in un livello arbitrario all'interno della pagina si può utilizzare questo metodo, che effettua una ricerca ricorsiva in tutti i controlli della pagina.

Non ho avuto modo di verificare questa affermazione, ma in pagine con tanti controlli innestati, ad esempio quando abbiamo DataGrid o DataList, può essere che un metodo di questo tipo introduca un certo overhead.

public static Control FindControl(string controlID, ControlCollection controls)
{
    
foreach (Control control in controls)
    {
        
if(control.ID == controlID)
            
return control;

        
if(control.HasControls())
        {
            Control nestedControl = FindControl(controlID, control.Controls);

            
if(nestedControl != null)  
                
return nestedControl;
        }
    }
    
return null;
}

I parametri che accetta sono naturalmente una stringa contenente l'ID del controllo da trovare ed una ControlCollection all'interno della quale cercare. Per cercare all'interno della ControlCollection principale, ossia quella della pagina, la chiamata al metodo dovrà essere di questo tipo:

Control foundControl = FindControl(foundControlID, Page.Controls);

powered by IMHO 1.3

posted on Wednesday, March 1, 2006 10:26 AM Print
News

Scopri CS2, il mio progetto universitario per l'indicizzazione e la ricerca di codice sorgente personale costruito su Lucene.Net.

Windows Developer Power Tools

Potete trovare il mio progetto BusyBoxDotNet nel libro Windows Developer Power Tools, pubblicato da O'Reilly, per il quale ho scritto l'intero capito dedicato.

Sono stato nominato dVP 2008, un riconoscimento per l'apporto fornito alla comunità del progetto db4o.