non ci avevo mai fatto caso, ovvero avevo preso per oro colato quanto diceva la documentazione sulla proprierà SelectedValue della DropDownList, in fondo chi sono io per dubitarne.
ecco cosa dice:
La proprietà SelectedValue può anche essere utilizzata per selezionare un elemento nel controllo elenco impostandolo con il valore dell'elemento. Se nessun elemento del controllo elenco contiene il valore specificato, viene generata un'eccezione System.ArgumentOutOfRangeException.
prendete una semplice DropDownList:
il controllo è alimentato da un SqlDataSource che recupera da una tabella nome e cognome dei clienti.
quello che mi aspetterei eseguendo il codice sottostante è una bella eccezione
protected void Page_Load(object sender, EventArgs e)
{
DropDownList1.SelectedValue = "questo valore non esiste proprio";
}
ed infatti è così...ma non sempre, scriviamo adesso:
protected void Page_Load(object sender, EventArgs e)
{
DropDownList1.DataBound += new EventHandler(DropDownList1_DataBound);
}
l'evento DataBound è nuovo in asp.net 2.0 e viene generato quando il DataBind si è ormai concluso.
void DropDownList1_DataBound(object sender, EventArgs e)
{
DropDownList1.SelectedValue = "questo valore non esiste proprio";
}
nessuna eccezione, nessun item viene selezionato perche? se controllare con il reflector della proprietà SelectedValue vedrete che l'eccezione viene sollevata solo se non viene trovata nessuna corrispondeza tra i valori dell'item della DropDownList e la pagina è eseguita a seguito di un PostBack, infatti aggiungiamo un bottone che nell'event hadler dell'evento Click esegue questo codice:
void Button1_Click(object sender, EventArgs e)
{
DropDownList1.SelectedValue = "questo valore non esiste proprio";
}
Ecco ricomparire la nostra bramata eccezione, quindi sarebbe più giusto dire:
La proprietà SelectedValue può anche essere utilizzata per selezionare un elemento nel controllo elenco impostandolo con il valore dell'elemento. Se nessun elemento del controllo elenco contiene il valore specificato e la pagina viene eseguita a seguito di un PostBack viene generata un'eccezione System.ArgumentOutOfRangeException.
questo è parte del controllo che fa la DropDownList:
if ((((this.Page != null) && this.Page.IsPostBack) && this._stateLoaded) && (item == null))
{
throw new ArgumentOutOfRangeException("value", SR.GetString("ListControl_SelectionOutOfRange", new object[] { this.ID, "SelectedValue" }));
}
quindi per ogni PostBack, la DropDownList come tutti gli eltri controlli , non fa distinzione da chi lo ha generato il postback
ciao marco
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Stampa
Download



Una precisazione... L'errore viene generato solo se la pagina viene eseguita dopo un postback generato dalla stessa ddl o da ogni postback della pagina?
Continua »»» | Rispondi »»»