2009-09-04 82 views
29

Me aparece este problema repetidamente y no tengo ni idea de qué lo está causando. Obtengo una excepción en el DataBind: SelectedValue which is invalid because it does not exist in the list of items.SelectedValue que no es válido porque no existe en la lista de elementos

Éstos son algunos datos importantes:

  1. vuelvo a cargar listOrgs periódicamente cuando los datos subyacentes ha cambiado.
  2. La llamada Organization.DTListAll devuelve 2 Int, String pairs.
  3. No hay duplicado o valores nulos en los datos devueltos
  4. Después de las dos primeras líneas de abajo, listOrgs.Items.Count es 0, y el valor seleccionado es 0
  5. El valor seleccionado después de la operación DataBind realiza se el valor de ID de la primera fila de los datos
  6. esta excepción ocurre la primera vez que se ejecuta este código después de una carga de la página fresca
listOrgs.Items.Clear(); 
listOrgs.SelectedValue = "0"; 
listOrgs.DataSource = new Organization().DTListAll(SiteID); 
listOrgs.DataTextField = "OrganizationName"; 
listOrgs.DataValueField = "OrganizationID"; 
listOrgs.DataBind(); 
+0

En lo que hace la línea de la excepción ocurre? La pieza informativa n. ° 5 implica que cada enunciado se ejecuta sin excepción. –

Respuesta

0

cambiar los primeros dos línea con esto:

listOrgs.SelectedItem.Selected = false; 
listOrgs.Items.Clear(); 
+0

Configuración SelectedItem.Selected = false arroja una excepción –

+0

¿Cuál es la excepción? tal vez debería crear una instancia de su lista desplegable nuevamente antes de enlazar: listOrgs = new DropDownList(); – Canavar

3

establecer listOrgs.SelectedValue = "0" después de actualizar el DataSource

En el momento en que están tratando de seleccionar el primer elemento de una lista vacía intento.

+0

Eso tuvo efecto. –

1

En caso de que todavía tiene este problema así es como lo resolví:

listOrgs.SelectedIndex = -1; // Clears the SelectedIndex to avoid the exception 
listOrgs.DataSource = new Organization().DTListAll(SiteID); 
listOrgs.DataTextField = "OrganizationName"; 
listOrgs.DataValueField = "OrganizationID"; 
listOrgs.DataBind();   //Unless you have "listOrgs.AppendDataBoundItems = true" you don't need to clear the list 
57

Al parecer, la solución que he publicado no fue del todo eficaz ... Con el tiempo en mi solicitud me cambiaron a esto:

listOrgs.Items.Clear(); 
listOrgs.SelectedIndex = -1; 
listOrgs.SelectedValue = null; 
listOrgs.ClearSelection();  // Clears the selection to avoid the exception (only one of these should be enough but in my application I needed all..) 
listOrgs.DataSource = new Organization().DTListAll(SiteID); 
listOrgs.DataTextField = "OrganizationName"; 
listOrgs.DataValueField = "OrganizationID"; 
listOrgs.DataBind(); 
+11

Esta es la única solución que funcionó para mí. Nunca me di cuenta de lo horrible que es el stock ddl – Mario

+0

. Hice una clase derivada del menú desplegable y anulé el conjunto de la propiedad DataSource para simplemente llamar a esas cosas, así que no tenía que recordar hacerlo por todas partes y funciona. como un encanto. ¡Gracias! – Justin

+0

Funcionó para mí también. Pero me sorprendí al pensar en el hereje: "¿No será más fácil crear una nueva instancia de la clase DropDownList y asignarla a la misma ID en su lugar?" Suspiro. –

7

Obtengo este error.
Lo extraño es que antes de configurar el origen de datos y volver a enlazar después de eliminar un elemento, el índice seleccionado = -1.

Si establecí explícitamente el selectedIndex = -1; entonces funciona y no arroja un error.

Así que, aunque ya estaba -1 estableciéndolo en -1, evita que se produzca un error.

Weird eh?

+0

Lo que demuestra la locura subyacente en el diseño de este control. – mm201

+0

¡Tuve la misma experiencia! Primero hice 'ddl.ClearSelection()' que borró el valor y el índice seleccionados. Hasta que obtuve el error. Cuando configuro 'ddl.SelectedIndex = -1' y' ddl.SelectedValue = null' explícitamente, ¡FUNCIONA! ??? –

1

No estoy seguro de que sea su caso, pero tuve el mismo problema y aparentemente no hubo explicación, entonces me di cuenta haciendo una copia y pegando en el bloc de notas de un campo de base de datos que al comienzo del valor había un NULL .

Lo curioso es que funcionaba una selección de tablas de unión. Borré la fila y la reinserté, después de que funcionaba bien.

1

@PMarques answer me ayudó y resolvió mi problema.

Sin embargo, durante la experimentación, me hizo un clic en la cabeza por qué me había traído el error en primer lugar.

Estaba configurando el atributo "Texto", pensando que podría crear una etiqueta que abarque o fieldset + leyenda, para mí (que no es así).

El Text property para una lista es de hecho la propiedad SelectedValue para un ListControl.

Así que mi error al malinterpretar lo que hizo la propiedad de texto.

0

Estaba obteniendo el mismo error repetidamente y trato de terminar no estableciendo el valor seleccionado predeterminado en Índice -1.

me comentó mi código ddlDRIBidAmt.SelectedValue = -1

Este valor se establece en el momento en que se restablecieron mis controles de página a sus valores predeterminados.

0

Sé que es demasiado tarde para responder, pero lo que probé es una solución sucia, pero funcionó. Después de enlace de datos, estoy insertar un elemento en el índice 0

ddl.Items.Insert(0, new ListItem("---Select---","-1")); 

Y el entorno,

estoy poniendo intento de captura, la captura estoy ajuste del valor a -1

Cuestiones relacionadas