2009-01-13 17 views
11

Tengo un menú desplegable, tengo un origen de datos, tengo AutoPostBack establecido en true.
Quiero agregar una primera entrada a la fuente de datos que diga algo como "--- seleccionar país ---" y al seleccionar esta entrada no se generará una devolución de datos.
Parece que debería ser fácil de hacer, pero parece que no puedo encontrar una buena solución.
Gracias.¿Cómo agrego una primera entrada vacía hacer un <asp: DropDownList>?

+0

¿Puede comentar cómo está compilando el resto de la lista (enlace de datos frente a ddl.Items.Add()) –

+0

¿Realmente desea que no se realice una devolución de datos si el usuario selecciona la entrada "seleccionar por favor"? ¿Qué pasa si el usuario selecciona alguna otra entrada, luego vuelve a "seleccionar por favor". ¿No quieres reconocer eso? Por supuesto, no sé nada sobre tu aplicación, pero lo que dices aquí, así que tal vez tiene mucho sentido en contexto. (Y me doy cuenta de que estoy haciendo esta pregunta más de 5 años después de la publicación original. ¡Espero que ya lo hayas descifrado!) – Jay

Respuesta

16

En su página aspx (la parte importante es el manejo del evento DataBound y el establecimiento de CausesValidation = "true" para forzar la validación de una lista desplegable):

<asp:DropDownList ID="ddlCountries" runat="server" DataSourceID="dsCountries" AutoPostBack="true" OnDataBound="ddlCountries_DataBound" CausesValidation="true" /> 
<asp:RequiredFieldValidator ID="rfvCountries" runat="server" ControlToValidate="ddlCountries" Display="Dynamic" ErrorMessage="Please select a country." /> 

En su código subyacente (es importante que la valor del elemento introducido es String.Empty para el validador de campo requerido para trabajar):

protected void ddlCountries_DataBound(Object sender, EventArgs e) 
{ 
ddlCountries.Items.Insert(0, new ListItem("--- select country ---", String.Empty)); 
} 

Nota: Si no desea que el mensaje del validador para visualizar, establezca la propiedad "Display" a " Ninguna".

+0

+1 Esto no soluciona el deseo de no tener una devolución de datos solo para la pero no estoy seguro de que cualquier solución fuera del extenso cableado de Javascript del control lo haga. Creo que esta es la mejor solución simple. –

+0

Actualicé mi respuesta para incluir un validador que debería ocuparse de no publicar para un artículo. –

+0

+1 (Si RequiredFieldValidator no funciona, solo use un CompareValidator) – user39603

5

También puede agregar la fila manualmente a través del diseñador, pero debe asegurarse de que la propiedad de DropDownList AppendDataBoundItems = True también para que las filas con datos se nutran en la primera fila.

+0

Tienes que tener cuidado con este. Asegúrese de que su conexión de datos no se carga cada vez que se cargue la página, de lo contrario su lista desplegable se agregará cada vez que se cargue la página. – Nasir

+0

Buen punto, recuerdo haber tenido que lidiar con eso desde el principio cuando comencé a trabajar con DDL. – TheTXI

0

Las respuestas anteriores se refieren a la inserción del valor, pero entiendo que su problema es la propiedad AutoPostBack. Supongo que no quieres devolver ese valor y ese es tu problema, ¿verdad?

Quizás haya una solución mejor, pero sugeriría que no se use AutoPostBack. Puede manejar la devolución de datos automáticamente utilizando el evento de cambio de valor seleccionado.

en mi humilde opinión, si el AutoPostBack no funciona como se desea, es siempre mejor para implementar su propia solución que poner algún tipo de "parche" sobre ella para "fijar" la misma.

Espero que ayude

+0

gracias. Pero siento que esto debería funcionar de inmediato. Con AutoPostBack activado, no hay forma de seleccionar la primera entrada. Entonces debes insertar uno que no haga nada. – vitule

0

Utilice el método de inserción como otros han sugerido para añadir el elemento en la posición 0 con un valor para indicar no seleccionado (por ejemplo, 'desconocido'). Luego use validadores, agregue un validador de campo requerido y establezca la propiedad InitialValue en el valor del nuevo elemento de la lista ('desconocido' en nuestro ejemplo).

Establezca el índice 0 para que sea el elemento seleccionado en la carga de la página y si no es una devolución.

Si el usuario no selecciona otra opción, el validador evitará la devolución de datos.

Espero que es lo que estás buscando.

Cuestiones relacionadas