Qual è il modo giusto per popolare un DropDownList da un database?

Sto popolando un DropDownList da un database SQL Server come mostrato di seguito. Funziona bene, ma non sono sicuro che sia un buon modo. Qualcuno può far luce su questo metodo e dare alcuni miglioramenti?

private void LoadSubjects() { ddlSubjects.Items.Clear(); string selectSQL = "SELECT SubjectID,SubjectName FROM Students.dbo.Subjects"; SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand(selectSQL, con); SqlDataReader reader; try { ListItem newItem = new ListItem(); newItem.Text = ""; newItem.Value = "0"; ddlSubjects.Items.Add(newItem); con.Open(); reader = cmd.ExecuteReader(); while (reader.Read()) { newItem = new ListItem(); newItem.Text = reader["SubjectName"].ToString(); newItem.Value = reader["SubjectID"].ToString(); ddlSubjects.Items.Add(newItem); } reader.Close(); } catch (Exception err) { //TODO } finally { con.Close(); } } 

È ansible associare DropDownList a un’origine dati (DataTable, List, DataSet, SqlDataSource, ecc.).

Ad esempio, se si desidera utilizzare un DataTable:

 ddlSubject.DataSource = subjectsTable; ddlSubject.DataTextField = "SubjectNamne"; ddlSubject.DataValueField = "SubjectID"; ddlSubject.DataBind(); 

MODIFICA – Esempio più completo

 private void LoadSubjects() { DataTable subjects = new DataTable(); using (SqlConnection con = new SqlConnection(connectionString)) { try { SqlDataAdapter adapter = new SqlDataAdapter("SELECT SubjectID, SubjectName FROM Students.dbo.Subjects", con); adapter.Fill(subjects); ddlSubject.DataSource = subjects; ddlSubject.DataTextField = "SubjectNamne"; ddlSubject.DataValueField = "SubjectID"; ddlSubject.DataBind(); } catch (Exception ex) { // Handle the error } } // Add the initial item - you can add this even if the options from the // db were not successfully loaded ddlSubject.Items.Insert(0, new ListItem(" 

Per impostare un valore iniziale tramite il markup, anziché code-behind, specificare l’opzione (s) e impostare l’attributo AppendDataBoundItems su true:

    

È quindi ansible associare DropDownList a un DataSource nel code-behind (è sufficiente ricordare di rimuovere:

 ddlSubject.Items.Insert(0, new ListItem(" 

dal code-behind, o avrai due “” articoli.

Spero di non esagerare con l’ovvio, ma perché non farlo direttamente in ASP? A meno che tu non stia modificando dynamicmente l’SQL in base a determinate condizioni del tuo programma, dovresti evitare il codebehind il più ansible.

È ansible eseguire quanto sopra descritto in ASP direttamente senza codice utilizzando il controllo SqlDataSource e una proprietà nel proprio elenco a discesa.

            
 public void getClientNameDropDowndata() { getConnection = Connection.SetConnection(); // to connect with data base Configure manager string ClientName = "Select ClientName from Client "; SqlCommand ClientNameCommand = new SqlCommand(ClientName, getConnection); ClientNameCommand.CommandType = CommandType.Text; SqlDataReader ClientNameData; ClientNameData = ClientNameCommand.ExecuteReader(); if (ClientNameData.HasRows) { DropDownList_ClientName.DataSource = ClientNameData; DropDownList_ClientName.DataValueField = "ClientName"; DropDownList_ClientName.DataTextField="ClientName"; DropDownList_ClientName.DataBind(); } else { MessageBox.Show("No is found"); CloseConnection = new Connection(); CloseConnection.closeConnection(); // close the connection } } 
 ((TextBox)GridView1.Rows[e.NewEditIndex].Cells[3].Controls[0]).Enabled = false;