Pregunta

En mi página tengo un DropDownList el que pueblan con los valores de base de datos a partir de una SqlDataSource (ver código de abajo).

¿Cómo puedo añadir mi propio texto o una línea en blanco antes de que los valores?

<asp:DropDownList ID="drpClient" runat="server" Width="200px" 
    AutoPostBack="True" DataSourceID="dsClients" DataTextField="name" 
        DataValueField="client_id">
</asp:DropDownList>
<asp:SqlDataSource ID="dsClients" runat="server" 
    ConnectionString="my_connection_string" 
    ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT [client_id], [name] FROM [clients]">
</asp:SqlDataSource>

Gracias.

P.S. ¿Usted recomienda el uso de un SqlDataSource o es mejor para poblar otra manera?

¿Fue útil?

Solución

Usted puede simplemente añadir un ListItem dentro de la DropDownList de marcado. Todos los valores de la fuente de datos se añadirán después de eso.

<asp:DropDownList ID="drpClient" runat="server" Width="200px" 
          AutoPostBack="True" DataSourceID="dsClients" DataTextField="name" 
          DataValueField="client_id" AppendDataBoundItems="true">
   <asp:ListItem>-- pick one --</asp:ListItem>
</asp:DropDownList>

Otros consejos

<asp:DropDownList ID="drpClient" runat="server" Width="200px" 
        AutoPostBack="True" DataSourceID="dsClients" DataTextField="name" 
        DataValueField="client_id" AppendDataBoundItems="True">

    <asp:ListItem Text="" Value="" />
 </asp:DropDownList>

Es fácil pasar por alto, por lo que no se olvide el atributo AppendDataBoundItems añadí.

En realidad no he probado esto, pero estoy asumiendo que usted podría agregar un elemento después de haber binded la lista del menú desplegable. Se podría añadir este evento a cualquier lista desplegable que desea añadir este cuadro vacío a.

protected void DropDownList_DataBound(object sender, EventArgs e)
    {
        DropDownList ddl = (DropDownList)sender;
        ListItem emptyItem = new ListItem("", "");
        ddl.Items.Insert(0, emptyItem);
    }

resuelvo cambiar el comando de selección de la adición de una opción vacío:

        <asp:SqlDataSource ID="dsClients" runat="server" 
            ConnectionString="my_connection_string" 
            ProviderName="System.Data.SqlClient" 
            SelectCommand="SELECT [client_id], [name] FROM [clients] union SELECT NULL, '--- pick one ----' ">
        </asp:SqlDataSource>

Saludos !!!

En la aplicación de estilo de afeitar a mí se parece a esto:

@Html.EnumDropDownListFor(
    model => model.Privilege.Role,
    "-- Select role --",
    new
    {
        @style = "width: 216px !important",
        @class = "form-control",
        id = "role",
        required = "required"
     })

Y en JavaScript que se ejecuta en la carga tengo esto:

function PutDefaultPrivilegePanelListHints() {
    $('#role').val('');
    ...
}

También hay solución más flexible a través de la validación discreta (no contar con HTML5):

$('.required').each(function () { $(this).rules('add', { required: true, messages: { required: '' } }) });

Por supuesto, no es un cheque en el lado del servidor, también. No creo que sea una buena idea para hacer frente a las clases. Por ejemplo, todo lo que muestro en la página de alguna clase. Esta clase tiene varias propiedades de tipo enumerables. Sería una pesadilla para replicar todas esas propiedades, pero haciéndolos nullable de alguna clase adicional como algunos sugieren aquí en stackoverflow.

Después de todo, ¿por qué debería cambiar mi lógica de negocio para el bien de algunas marcas específicas? En su lugar, trato con todo a través de JavaScript y algunas comprobaciones modelo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top