2009-08-08 16 views

risposta

77

Se si sa che il DropDownList contiene il valore che stai cercando di selezionare, utilizzare:

ddl.SelectedValue = "2"; 

Se non siete sicuri se il valore esiste, uso (o si otterrà un'eccezione riferimento null):

ListItem selectedListItem = ddl.Items.FindByValue("2"); 

if (selectedListItem != null) 
{ 
    selectedListItem.Selected = true; 
} 
+3

ecco la stessa seconda soluzione ma in una riga di codice: ddl.Items.FindByValue ("2"). Selected = true; –

+2

Ciò comporterà un errore se l'articolo non viene trovato. – ScottE

+0

Il menu a discesa è in un popup che è stato popolato al caricamento della pagina. Sto cercando di impostare l'indice selezionato prima di mostrare il popup ma non funziona. Puoi per favore aiutare? http://stackoverflow.com/questions/28883433/how-to-populate-dropdownlist-in-a-popup-before-showing-from-code-behind – SearchForKnowledge

1
combobox1.SelectedValue = x; 

ho il sospetto si consiglia yo sentire qualcosa di diverso, ma questo è quello che hai chiesto.

+0

Non puoi perché il valore Selezionato ottiene solo il valore non impostato –

+0

David - in realtà non sei corretto. Fai un tentativo e se hai dato il -1, probabilmente dovresti rimuoverlo! Ovviamente otterrai un'eccezione se il valore non esiste, ma altrimenti funzionerà perfettamente. – ScottE

23
myDropDown.SelectedIndex = 
    myDropDown.Items.IndexOf(myDropDown.Items.FindByValue("myValue")) 
+0

Il valore sta diventando -1 in myDropDown.SelectedIndex perché? –

+1

probabilmente perché myDropDown.Items non ha un elemento "myValue" –

+0

IndexOf() restituisce -1 se l'elemento non è nella raccolta. FindByValue() non sta trovando l'oggetto che stai cercando.Basta scomporlo in istruzioni separate se è necessario eseguirne il debug. – womp

1

Questo è un modo semplice per selezionare un'opzione da un dropdownlist basato su una stringa val

private void SetDDLs(DropDownList d,string val) 
    { 
     ListItem li; 
     for (int i = 0; i < d.Items.Count; i++) 
     { 
      li = d.Items[i]; 
      if (li.Value == val) 
      { 
       d.SelectedIndex = i; 
       break; 
      } 
     } 
    } 
6
ddl.SetSelectedValue("2"); 

con estensione a portata di mano:

public static class WebExtensions 
{ 

    /// <summary> 
    /// Selects the item in the list control that contains the specified value, if it exists. 
    /// </summary> 
    /// <param name="dropDownList"></param> 
    /// <param name="selectedValue">The value of the item in the list control to select</param> 
    /// <returns>Returns true if the value exists in the list control, false otherwise</returns> 
    public static Boolean SetSelectedValue(this DropDownList dropDownList, String selectedValue) 
    { 
     ListItem selectedListItem = dropDownList.Items.FindByValue(selectedValue); 

     if (selectedListItem != null) 
     { 
      selectedListItem.Selected = true; 
      return true; 
     } 
     else 
      return false; 
    } 
} 

Nota: Tutto il codice è rilasciato nel pubblico dominio. Nessuna attribuzione richiesta.

0

Per coloro che vengono qui da ricerca (perché questa discussione è più di 3 anni):

string entry // replace with search value 

if (comboBox.Items.Contains(entry)) 
    comboBox.SelectedIndex = comboBox.Items.IndexOf(entry); 
else 
    comboBox.SelectedIndex = 0; 
+0

Il metodo Contains accetta un parametro ListItem, non un parametro del valore stringa. –

1

Ian Boyd (sopra) ha avuto una grande risposta - Aggiungi questo alla classe di Ian Boyd "WebExtensions" per selezionare un elemento in un elenco a discesa basato sul testo:

/// <summary> 
    /// Selects the item in the list control that contains the specified text, if it exists. 
    /// </summary> 
    /// <param name="dropDownList"></param> 
    /// <param name="selectedText">The text of the item in the list control to select</param> 
    /// <returns>Returns true if the value exists in the list control, false otherwise</returns> 
    public static Boolean SetSelectedText(this DropDownList dropDownList, String selectedText) 
    { 
     ListItem selectedListItem = dropDownList.Items.FindByText(selectedText); 

     if (selectedListItem != null) 
     { 
      selectedListItem.Selected = true; 
      return true; 
     } 
     else 
      return false; 
    } 

Chiamarlo:

WebExtensions.SetSelectedText(MyDropDownList, "MyValue"); 
0

preferisco

if(ddl.Items.FindByValue(string) != null) 
{ 
    ddl.Items.FindByValue(string).Selected = true; 
} 

Sostituire DDL con l'ID dropdownlist e stringa con la stringa nome o valore della variabile.

+0

Questa risposta è già stata fornita più o meno nella stessa forma ... – MarioDS

+0

@MarioDS Davvero? Non è più o meno indicativo di essere diverso. Funziona o no? È uguale a qualcosa fornito o no? Se sì al primo e no al secondo, perché il meno? – San

+0

@MarioDS La risposta fornisce la stessa funzione con meno codice. Tutte le risposte su qui forniscono modi diversi per benefici diversi, i vantaggi di questo sono meno codice. – San

Problemi correlati