web-dev-qa-db-fra.com

Liste déroulante Databound - valeur initiale

Comment définir la valeur initiale d'une liste déroulante de databound dans ASP.NET?

Par exemple, je veux les valeurs, mais la première valeur à afficher devrait être - Sélectionnez un ---, avec une valeur nulle.

28
mmcglynn

Je pense que ce que vous voulez faire est le suivant:

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true">
    <asp:ListItem Text="--Select One--" Value="" />   
</asp:DropDownList>

Assurez-vous que "AppendDataBoundItems" est défini sur vrai sinon vous effacerez l'élément de liste '--Select One--' lorsque vous liez vos données.

Si vous avez la propriété "AutoPostBack" de la liste déroulante définie sur vrai vous devrez également définir la propriété "CausesValidation" sur vrai puis utilisez un 'RequiredFieldValidator' pour vous assurer que l'option '--Select One--' ne provoque pas de publication.

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1"></asp:RequiredFieldValidator>
64
Phaedrus

Je sais que c'est vieux, mais une combinaison de ces idées conduit à une solution très élégante:

Conservez tous les paramètres de propriété par défaut pour DropDownList (AppendDataBoundItems = false, Items empty). Ensuite, gérez l'événement DataBound comme ceci:

protected void dropdown_DataBound(object sender, EventArgs e)
{
    DropDownList list = sender as DropDownList;
    if (list != null)
        list.Items.Insert(0, "--Select One--");
}

La cerise sur le gâteau est que ce gestionnaire peut être partagé par un certain nombre d'objets DropDownList, ou même placé dans une bibliothèque d'utilitaires à usage général pour tous vos projets.

11
Matt L

Ce que je fais, c'est définir la propriété de texte de la liste déroulante APRÈS l'avoir databind. Quelque chose comme ça:

   protected void LoadPersonComboBox()
    {
        var p = new PeopleBLL();

        rcmbboxEditPerson.DataSource = p.GetPeople();
        rcmbboxEditPerson.DataBind();
        rcmbboxEditPerson.Text = "Please select an existing person to edit...";
    }

Cela fait apparaître la valeur visible initiale de cette liste déroulante, mais ne fait pas réellement partie de la liste déroulante, ni n'est sélectionnable.

2
GregD

Je sais que cela a déjà une réponse choisie - mais je voulais ajouter mes deux cents. J'ai une liste déroulante liée aux données:

<asp:DropDownList 
  id="country" 
  runat="server" 
  CssClass="selectOne" 
  DataSourceID="country_code" 
  DataTextField="Name" 
  DataValueField="CountryCode_PK"
></asp:DropDownList>
<asp:SqlDataSource 
  id="country_code" 
  runat="server" 
  ConnectionString="<%$ ConnectionStrings:DBConnectionString %>"
  SelectCommand="SELECT CountryCode_PK, CountryCode_PK + ' - ' + Name AS N'Name' FROM TBL_Country ORDER BY CountryCode_PK"
></asp:SqlDataSource>

Dans le codebehind, j'ai ceci - (qui sélectionne les États-Unis par défaut):

if (this.IsPostBack)
{
  //handle posted data
}
else 
{
  country.SelectedValue = "US";
}

La page se charge initialement en fonction de la valeur "US" plutôt que d'essayer de se soucier d'un index sélectionné (et si un autre élément est ajouté dans le tableau de données - je ne veux pas avoir à recoder)

2
JayTee

salut ami dans ce cas, vous pouvez utiliser le

AppendDataBound="true"

et après cela, utilisez l'élément de liste. par exemple:

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true">
    <asp:ListItem Text="--Select One--" Value="" />   
</asp:DropDownList>

mais le problème est que, après la deuxième fois, les données sélectionnées sont ajoutées aux anciennes données.

1
rikin

Pour sélectionner une valeur dans la liste déroulante, utilisez l'index comme ceci:

si nous avons le

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true"></asp:DropDownList>

vous utiliseriez:

DropDownList1.Items[DropDownList1.SelectedIndex].Value

cela retournerait la valeur de l'index sélectionné.

1
Alex Peta

Ajoutez un élément et définissez sa propriété "Selected" sur true, vous souhaiterez probablement définir la propriété "appenddatabounditems" sur true également afin que votre valeur initiale ne soit pas supprimée lors de la databound.

Si vous parlez de définir une valeur initiale qui se trouve dans vos éléments de databound, connectez-vous à votre événement ondatabound et définissez quel index vous souhaitez sélectionner = true, vous voudrez l'encapsuler dans "sinon page.isPostBack alors ...." bien que

Protected Sub DepartmentDropDownList_DataBound(ByVal sender As Object, ByVal e As    System.EventArgs) Handles DepartmentDropDownList.DataBound
    If Not Page.IsPostBack Then
        DepartmentDropDownList.SelectedValue = "somevalue"
    End If
End Sub
0
Element