2010-01-05 16 views
47

Cuando el usuario navega a una página nueva, el índice seleccionado de este ddl está determinado por una cookie, pero si el ddl no contiene el valor de esa cookie, me gustaría que se establezca en 0. ¿Qué método usaría? para el ddl? Es un bucle de la mejor manera, o hay una declaración simplemente si puedo realizar?¿La mejor manera de verificar si una lista desplegable contiene un valor?

Esto es lo que he intentado, pero no devuelve un bool.

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

Respuesta

108

Hay dos métodos que vienen a la mente:

Se puede usar Contiene este modo:

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

o modificar su estrategia actual:

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

EDITAR: También hay un DropDownList.Items.FindByValue que funciona de la misma manera que FindByText, excepto que se basa en búsquedas en valores en su lugar.

+0

Items.FindByText era una buena opción. Gracias –

+0

¿Alguna idea sobre las diferencias de rendimiento? – MetalPhoenix

+0

El primer 'Contiene' no funcionó para mí. Incluso si el artículo existe en el menú desplegable 'ListItemCollection', pasó a la condición' else'. ¿Alguna idea de por qué? – doutriforce

8

Eso devolverá un artículo. Basta con cambiar a:

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

No hay .Count disponible. – Justen

+0

¿Una colección de artículos o un solo artículo? No sé asp.net pero Google sugirió que (ListItemCollection.FindByText) devuelva ListItem o null? Entonces! = Nulo sería? –

+0

Lo siento, me di cuenta de mi error justo después de publicar, pero aparentemente no antes confundí a un par de personas ... No estoy seguro de lo que estaba pensando. –

0

Usted podría intentar la comprobación para ver si este método devuelve un valor nulo:

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

Qué tal esto:

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

En C# esto funciona:

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

Actualización:

Traducir el código anterior a Visual Basic no funciona. Lanza "System.NullReferenceException: referencia de objeto no establecida en una instancia de un objeto ..."

So. para que esto funcione en Visual Basic, que tenía que cambiar el código como el siguiente:

 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 "). Valor ==" AlmacenDefectoAndes "' debe ser 'DDLAlmacen.Items.FindByValue (" AlmacenDefectoAndes ")! = Null'; de lo contrario, obtendrá la NullReferenceException si no puede encontrar un entrada con ese valor. – Trisped

4

Si 0 es el valor por defecto, sólo puede utilizar una asignación simple:

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

Esto selecciona automáticamente el elemento de lista adecuado, si el DDL contiene el valor de la cookie. Si no lo contiene, esta llamada no cambiará la selección, por lo que permanece en la selección predeterminada. Si el último es igual que el valor 0, entonces es la solución perfecta para usted.

Uso este mecanismo bastante y lo encuentro muy útil.

0

// puede usar el? operador en lugar de si

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

Si la función de retorno Nada, se puede tratar esto más adelante

if (ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()) != Nothing) 
{ 
... 
} 
Cuestiones relacionadas