Pergunta

Na minha página eu tenho um DropDownList que eu preencher com os valores do banco de dados a partir de um SqlDataSource (ver código abaixo).

Como posso adicionar o meu próprio texto ou uma linha em branco antes dos 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>

Graças.

P.S. Você recomendo usar um SqlDataSource ou é melhor para preencher uma outra maneira?

Foi útil?

Solução

Você pode simplesmente adicionar um ListItem dentro do DropDownList Markup. Todos os valores da fonte de dados será anexado depois disso.

<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>

Outras dicas

<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>

É fácil perder, então não esqueça o atributo AppendDataBoundItems acrescentei.

Eu realmente não tenho testado isso, mas eu estou supondo que você poderia adicionar um item depois de ter binded a lista suspensa. Você pode adicionar este evento para qualquer lista suspensa que você gostaria de adicionar esta caixa vazia para.

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

Eu resolver mudar o comando select adicionando uma opção vazia:

        <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>

Saudações !!!

Na implementação de estilo de barbear para mim parece que isso:

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

E em javascript que é executado na carga eu tenho este:

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

Há também é a solução mais flexível via validação discreto (não contar com HTML5):

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

É claro que há uma verificação do lado do servidor também. Eu não acho que é uma boa idéia para lidar com classes. Por exemplo, tudo o que eu mostrar na página de alguma classe. Esta classe tem várias propriedades do tipo enumeráveis. Seria um pesadelo para replicar todas essas propriedades, mas tornando-anulável, de alguma classe adicional como alguns sugeriram aqui em stackoverflow.

Afinal, por que eu deveria mudar minha lógica de negócios por causa de alguma marcação específica? Em vez disso, eu lidar com tudo via javascript e alguns cheques modelo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top