2010-01-05 17 views
47

Quando l'utente naviga verso una nuova pagina, l'indice selezionato di ddl è determinato da un cookie, ma se il ddl non contiene il valore di quel cookie, allora mi piacerebbe che fosse impostato lo 0. Quale metodo dovrei usare per il ddl? Un loop è il modo migliore, o c'è una semplice dichiarazione che posso esibire?Il modo migliore per verificare se un elenco a discesa contiene un valore?

Questo è quello che ho tentato, ma non restituisce un bool.

if (!ddlCustomerNumber.Items.FindByText(GetCustomerNumberCookie().ToString())) 
    ddlCustomerNumber.SelectedIndex = 0; 

risposta

108

Ci sono due metodi che vengono in mente:

Si potrebbe utilizzare Contiene in questo modo:

if (ddlCustomerNumber.Items.Contains(new 
    ListItem(GetCustomerNumberCookie().ToString()))) 
{ 
    // ... code here 
} 

o modificare la vostra strategia corrente:

if (ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()) != null) 
{ 
    // ... code here 
} 

MODIFICA: C'è anche un DropDownList.Items.FindByValue che funziona allo stesso modo di FindByText, tranne per le ricerche basate su valori invece.

+0

Items.FindByText era una buona opzione. Grazie –

+0

Qualche idea sulle differenze di rendimento? – MetalPhoenix

+0

Il primo 'Contains' non ha funzionato per me. Anche se l'elemento esiste nel menu a discesa 'ListItemCollection', è passato alla condizione' else'. Qualche idea del perché? – doutriforce

8

Ciò restituirà un articolo. Semplicemente cambiare a:

if (ddlCustomerNumber.Items.FindByText(GetCustomerNumberCookie().ToString()) != null) 
    ddlCustomerNumber.SelectedIndex = 0; 
+0

Non c'è Count disponibili. – Justen

+0

Una raccolta di articoli o un singolo oggetto? Non conosco asp.net ma Google ha suggerito che (ListItemCollection.FindByText) restituisce un ListItem o null? Quindi! = Null sarebbe? –

+0

Scusa, ho realizzato il mio errore subito dopo la pubblicazione, ma a quanto pare non prima di aver confuso un paio di persone ... Non sono sicuro di cosa stavo pensando. –

0

Si potrebbe provare a controllare per vedere se questo metodo restituisce un valore nullo:

if (ddlCustomerNumber.Items.FindByText(GetCustomerNumberCookie().ToString()) != null) 
    ddlCustomerNumber.SelectedIndex = 0; 
1

Che dire di questo:

ListItem match = ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()); 
if (match == null) 
    ddlCustomerNumber.SelectedIndex = 0; 
//else 
// match.Selected = true; // you'll probably select that cookie value 
0

In C# questo funziona:

 if (DDLAlmacen.Items.Count > 0) 
     { 
      if (DDLAlmacen.Items.FindByValue("AlmacenDefectoAndes").Value == "AlmacenDefectoAndes") 
      { 
       DDLAlmacen.SelectedValue = "AlmacenDefectoAndes"; 
      } 
     } 

Aggiornamento:

La conversione del codice sopra in Visual Basic non funziona. Getta "System.NullReferenceException: riferimento oggetto non impostato su un'istanza di un oggetto .."

così. per questo al lavoro su Visual Basic, ho dovuto cambiare il codice come questo:

 If DDLAlmacen.Items.Count > 0 Then 
      If DDLAlmacen.Items.Contains(New ListItem("AlmacenDefectoAndes")) Then 
       DDLAlmacen.SelectedValue = "AlmacenDefectoAndes" 
      End If 
     End If 
+0

'DDLAlmacen.Items.FindByValue (" AlmacenDefectoAndes "). Valore ==" AlmacenDefectoAndes "' deve essere 'DDLAlmacen.Items.FindByValue (" AlmacenDefectoAndes ")! = Null', altrimenti si ottiene NullReferenceException se non riesce a trovare un entrata con quel valore. – Trisped

4

Se 0 è il vostro valore di default, si può semplicemente utilizzare una semplice assegnazione:

ddlCustomerNumber.SelectedValue = GetCustomerNumberCookie().ToString(); 

Questo seleziona automaticamente la elemento dell'elenco corretto, se il DDL contiene il valore del cookie. Se non lo contiene, questa chiamata non cambierà la selezione, quindi rimarrà alla selezione predefinita. Se quest'ultimo è uguale al valore 0, allora è la soluzione perfetta per te.

Io uso questo meccanismo parecchio e lo trovo molto utile.

0

// è possibile utilizzare il? operatore al posto di se

ddlCustomerNumber.SelectedValue = ddlType.Items.FindByValue(GetCustomerNumberCookie().ToString()) != null ? GetCustomerNumberCookie().ToString() : "0"; 
0
ListItem item = ddlComputedliat1.Items.FindByText("Amt D"); 
if (item == null) { 
    ddlComputedliat1.Items.Insert(1, lblnewamountamt.Text); 
} 
0

Se la funzione di ritorno Nulla, si può provare questo sotto

if (ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()) != Nothing) 
{ 
... 
} 
Problemi correlati