Question

Sur ma page J'ai un DropDownList que je remplir avec des valeurs de base de données à partir d'un SqlDataSource (voir code ci-dessous).

Comment puis-je ajouter mon propre texte ou une ligne vide avant que les valeurs?

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

Merci.

P.S. Recommandez-vous à l'aide d'un SqlDataSource ou est-il préférable de remplir une autre façon?

Était-ce utile?

La solution

Vous pouvez simplement ajouter un ListItem à l'intérieur du DropDownList de balisage. Toutes les valeurs du DataSource seront ajoutés après.

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

Autres conseils

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

Il est facile de manquer, donc ne pas oublier l'attribut AppendDataBoundItems je.

Je ne l'ai pas vraiment testé mais je suppose que vous pouvez ajouter un élément après avoir binded la liste déroulante. Vous pouvez ajouter cet événement à une liste déroulante vous souhaitez ajouter cette case vide.

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

Je résous changer la commande de sélection en ajoutant une option vide:

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

Bonjour !!!

Dans la mise en œuvre de style de rasoir à moi, il ressemble à ceci:

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

Et en javascript qui est exécuté sur la charge que j'ai ceci:

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

Il y a aussi une solution plus flexible via la validation discrète (ne pas compter sur HTML5):

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

Bien sûr, il y a un contrôle côté serveur, aussi. Je ne pense pas que ce soit une bonne idée de faire face à des classes. Par exemple, tout ce que je montre dans la page est une classe. Cette classe possède plusieurs propriétés de type dénombrables. Ce serait un cauchemar pour reproduire toutes ces propriétés, mais ce qui les rend dans une classe être nulles supplémentaires que certains ceux suggérés ici sur stackoverflow.

Après tout, pourquoi devrais-je changer ma logique d'affaires pour le bien de quelques balises spécifiques? , Je traite au lieu de tout via javascript et certains contrôles de modèle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top