Ogni volta che nello sviluppo di una pagina Web Form dobbiamo effettuare il databind di una DropDownList, vanno settate diverse proprietà e chiamato il metodo Databind() e se poi vogliamo aggiungere servono altre righe di codice. Se in una pagina abbiamo numerose DropDownList questo porta ad una notevole ripetizione di codice. Un extension method sulla classe DropDownList risolve questi problemi e ci permette di inserire anche dei parametri di default. 

Qui sotto il codice della nostra implementazione

public static class Extension
{
    public static void Binda<T>(this DropDownList dropdownlist, IEnumerable<T> source, string valueField = "Value", string textField = "Text", bool addDefaultItem = false, string defaultValue = "", string defaultText = "-----")
    {
        if (dropdownlist == null)
            throw new NullReferenceException("dropdownlist is null");
        if (source == null)
            throw new NullReferenceException("source is null");

        dropdownlist.DataSource = source;
        dropdownlist.DataTextField = textField;
        dropdownlist.DataValueField = valueField;
        dropdownlist.DataBind();

        if (addDefaultItem)
        {
            dropdownlist.Items.Insert(0, new ListItem { Text = defaultText, Value = defaultValue });
        }
    }
}

La prima cosa che facciamo è validare i dati in ingresso e poi segue semplicemente il codice per effettuare un databind della dropdownlist. L'utilizzo è molto semplice, mostriamo di seguito alcuni esempi:

// Un'unico parametro: nel caso in cui gli oggetti in source abbiamo una proprietà "Value" e una "Text"
//Non viene aggiunto nessun elemento di default
drop.Binda(source);

// 3 parametri: la proprietà "Id" è il valore, "Nome" è il testo visualizzato. 
//Non viene aggiunto nessun elemento di default
drop.Binda(source, "Id", "Nome");

// 4 parametri: la proprietà "Id" è il valore, "Nome" è il testo visualizzato. 
//Viene aggiunto un elemento di default con valore "" e testo "-----"
drop.Binda(source, "Id", "Nome", true);

// 6 parametri: la proprietà "Id" è il valore, "Nome" è il testo visualizzato. 
//Viene aggiunto un elemento di default con valore "0" e testo "Tutti"
drop.Binda(source, "Id", "Nome", true, "0", "Tutti");
comments powered by Disqus