2010-08-16 16 views
60

Desidero impostare l'attributo selecteditem per un controllo dropdownlist ASP.Net a livello di codice.Impostazione dropdownlist selecteditem programmaticamente

Quindi voglio passare un valore al controllo elenco a discesa per impostare l'elemento selezionato in cui l'elemento è uguale al valore passato.

+2

Vuoi dire 'myList.SelectedValue = someStringValue;'? – kbrimington

risposta

87

Supponendo che l'elenco sia già associato ai dati, è sufficiente impostare la proprietà SelectedValue nell'elenco a discesa.

list.DataSource = GetListItems(); // <-- Get your data from somewhere. 
list.DataValueField = "ValueProperty"; 
list.DataTextField = "TextProperty"; 
list.DataBind(); 

list.SelectedValue = myValue.ToString(); 

Il valore della variabile myValue avrebbe bisogno di esistere nella proprietà specificata all'interno del DataValueField nel vostro controlli associazione dati.

UPDATE: Se il valore di myValue non esiste come un valore con le opzioni di elenco a discesa sarà predefinito per selezionare la prima opzione nell'elenco a discesa.

+4

No, SelectedValue non è di sola lettura: "Ottiene il valore dell'elemento selezionato nel controllo elenco o seleziona l'elemento nel controllo elenco che contiene il valore specificato." – chris4600

+0

Questo ha funzionato solo per me, ha scelto quale elemento dovrebbe essere preselezionato in base al valore che ho dato a '.SelectedValue'. – ptf

28

ecco il codice che stavo cercando:

DDL.SelectedIndex = DDL.Items.IndexOf(DDL.Items.FindByText("PassedValue")); 

O

DDL.SelectedIndex = DDL.Items.IndexOf(DDL.Items.FindByValue("PassedValue")); 
+0

In pratica sta facendo la stessa cosa con più codice. Anche se il valore selezionato non esiste come elemento nell'elenco, per impostazione predefinita è la prima opzione come valore selezionato. –

55

ddlData.SelectedIndex conterrà il valore int Per selezionare il valore specifico in DropDown:

ddlData.SelectedIndex=ddlData.Items.IndexOf(ddlData.Items.FindByText("value")); 

return tipo di ddlData.Items.IndexOf(ddlData.Items.FindByText("value")); è int.

4

Beh, se ho capito correttamente la tua domanda. La soluzione per l'impostazione del valore per un dato dropdownlist sarà:

dropdownlist1.Text="Your Value"; 

Questo funziona solo se il valore è esistente nel data-sorgente del dropdownlist.

4

Se è necessario selezionare la voce della lista sulla base di un'espressione:

foreach (ListItem listItem in list.Items) 
{ 
    listItem.Selected = listItem.Value.Contains("some value"); 
} 
1
var index = ctx.Items.FirstOrDefault(item => Equals(item.Value, Settings.Default.Format_Encoding)); 
ctx.SelectedIndex = ctx.Items.IndexOf(index); 

O

foreach (var listItem in ctx.Items) 
    listItem.Selected = Equals(listItem.Value as Encoding, Settings.Default.Format_Encoding); 

dovrebbe funzionare .. soprattutto quando si utilizzano i controlli RAD estesi in cui FindByText/Valore non esiste nemmeno!

-3
  ddlemployee.DataSource = ds.Tables[0]; 
      ddlemployee.DataTextField = "Employee Name"; 
      ddlemployee.DataValueField = "RecId"; 
      ddlemployee.DataBind(); 
      ddlemployee.Items.Insert(0, "All"); 
+0

Potresti migliorare la tua risposta. _ [Le risposte al solo codice possono rientrare in "Qualità molto bassa" ... e sono candidate alla cancellazione ....Abbiamo sempre propagandato che non siamo una fabbrica di codici. Noi siamo le persone che insegnano agli altri a pescare. Le risposte al solo codice alimentano una persona per un giorno] (http://meta.stackexchange.com/questions/148272/is-there-any-benefit-to-allowing-code-only-answers-while-blocking-code -only-ques) _ – MickyD

1
ddList.Items.FindByText("oldValue").Selected = false; 
ddList.Items.FindByText("newValue").Selected = true; 
+0

Benvenuti in StackOverflow. Per rendere la tua risposta beffa - aggiungi alcuni commenti a un codice che hai postato. Pubblicare un blocco di codice senza spiegazioni non è una risposta adeguata. – Artemix