Home / Programmazione / C# - Asp.NET / Riempire DropDownList da SQL
Mattepuffo

Riempire DropDownList da SQL

Riempire DropDownList da SQL

Sulla scia dell'articolo di questo, in cui spiego come riempire una JComboBox cone dati presi da db, ho deciso di scrivere una guida per la "gemella" DropDownList di Asp.NET.

Tenendo in considerazione che qua come db uso SQL Server e come linguaggio il C#.

Lo scenario però è lo stesso, quindi dategli una letta.

Riassumendo voglio rimepire la DDL con dati presi dalla tabella autori che ha solo due campi:

  • author_id (int)
  • author_name (string)

DropDownList è uno dei controll Web più utilizzati.

Da Visual Studio è facile riempirli, ma preferisco usare il code-behind.

La procedura però è molto più veloce in quanto il framework mette a disposizione i metodi per scegliere il valore della DDL e cosa viene rappresentato.

Prima di tutto aggiungiamo una DDL alla pagina:

<asp:DropDownList ID="ddlAuthor" runat="server">
</asp:DropDownList>

Sulla pagina non faremo nient'altro, quindi spostiamoci nel code-behind.

 

Subito prima del metodo Page_Load istanziamo la connessione:

SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MYCONN"].ConnectionString);

Ricordatevi di agiungere il namespace:

using System.Data.SqlClient;

Nel mio caso ho usato la stringa di connessione impostata nel Web.config.

Ve la posto come esempio ma non spiegherò come funziona:

<add name="MYCONN" connectionString="Data Source=indirizzo_ip;Initial Catalog=MYDB;Persist Security Info=True;User ID=user;Password=pass" providerName="System.Data.SqlClient"/>

Fatto ciò dobbiamo creare un metodo che aggiunga le voci alla DDL:

protected void ddlAuthorSource()
{
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM author", conn);
try
{
conn.Open();
DataSet ds = new DataSet();
adapter.Fill(ds);
ddlAuthor.DataSource = ds;
ddlAuthor.DataValueField = "author_id";
ddlAuthor.DataTextField = "author_name";
ddlAuthor.DataBind();
ddlAuthor.Items.Insert(0, new ListItem("*", "0"));
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
conn.Close();
}
}

Usiamo SqlDataAdapter per eseguire un comando (la query) da inviare al DataSet.

Apriamo la connessione, estrapoliamo i dati con un DataSet, e riempiamo il SqlDataAdapter con il medtodo Fill().

Poi seguono le varie impostazioni della DDL.

Come DataSource gli diamo il DataSet in modo che vengia riempita con i valori della tabella interrogata.

DataValueField è il campo che fornisce il valore all'elemento.

Io gli ho impostato l'id.

In DataTextField viene impostato il campo che fornisce il testo dell'elemento, cioà quello che viene visualizzato.

Mettendo autor_name vedremo i nomi degli autori corrispondenti a DataValuefield.

Facciamo il Bind l'origine dei dati al nostro controllo server e aggiungiamo come primo valore un asterisco in modo che l'utente sia costretto a scegliere un valore e non si sbagli inviando magari il pirmo record della tabella.

Infine richiamiamo questo metodo dentro al Page_Load in modo che venga caricato in apertura di pagina:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddlAuthorSource();
}
}

 

A questo punto se avete letto l'altro articolo con attenzione vi sareste dovuti rendere conto di una cosa: non ho dovuto creare una classe apposita che rappresenta gli Autori perchè qua non mi serve.

Di la l'avevo fatto perchè se poi volevo inserire un libro nuovo avevo bisogno di recuperare l'id da passare alla query di inserimento.

Qui l'id già ce l'ho, e lo ottengo tramite DataValuefield.

In fase di inserimento, quindi, a un possibile metodo passerete il valore tramite:

ddlAuthot.SelectedValue;

Ci penserà DataValuefield a passargli l'id.