DropDowList tu mi tradisci

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.

Nella stessa categoria

Commenti
abellix scrive:
DropDowList tu mi tradisci

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? Grazie
22/11/2007 ore 9.58 | 1 risposta
»»»» nostromo scrive:
Re: DropDowList tu mi tradisci

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
22/11/2007 ore 10.11

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

© 1998-2008 - nostromo - Il blog di Marco Leoncini

TagCloud
BLOG INFO
  • Post: 222
  • Commenti: 88
  • TrackBacks: 17
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom OPML

MVP
CATEGORIE
I PIÙ LETTI DEL MESE
IN EVIDENZA