>Scusa Rossimako ma non sono d'accordo...
>
>1) Dopo i postback il controllo dotnet mantiene li stati precedenti,
>quindi se aggiunti alla pagina non devono essere ridisegnati.
Mantiene lo stato se ricrei il controllo. Io infatti ho fatto presente che se crei i controlli dinamicamente da codice (e quindi non inserendoli nell'aspx) nei postback successivi devi ricrearli con lo stesso id per far si che poi il motore di asp.net li visualizzi nuovamente con il valore inserito dall'utente.
Puoi verificarlo con un piccolo progetto di esempio:
aspx:
Codice:
void btnCrea_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
TextBox txt = new TextBox();
txt.ID = string.Format("txt_{0}", i);
txt.Text = i.ToString();
ctrlContainer.Controls.Add(txt);
}
}
void btnControlla_Click(object sender, EventArgs e)
{
btnControlla.Text = "Controllato"
}
E' un esempio molto banale, ma quando premi il pulsante controlla vedrai che tutti i controlli creati non saranno visualizzati all'interno della pagina. La mia osservazione era semplicemente su questo punto
>2) Il comando findcontrol di fatto scannerizza tutti i controlli
>del form fino a quando non trova il controllo che cerchi, è un
>po' uno spreco di risorse eseguire 100 find controll quindi 100
>scansioni quando con una ottieni lo stesso risultato...
Vero, dipende sempre da quanti controlli crei e da come accedi agli stessi, se devi leggerli tutti o se fai un'accesso puntale ad alcuni. Però mi permetto di fare una modifica al tuo codice, perchè inerire dei try catch non è performante, scatenare un errore è un'operazione molto pesante. E' meglio verificare a priori la tipologia del controllo:
ControlCollection cc = Page.Form.Controls;
foreach (Control c in cc)
{
if (c is CheckBox)
{
CheckBox chk = (CheckBox)c;
//fai quello che vuoi
}
}
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko