Question

Je veux juste une DropDownList ASP.NET sans élément sélectionné. Définir SelectedIndex sur -1 est inutile jusqu'à présent. J'utilise Framework 3.5 avec AJAX, c'est-à-dire que DropDownList se trouve dans un UpdatePanel. Voici ce que je fais:

    protected void Page_Load (object sender, EventArgs e)
    {
        this.myDropDownList.SelectedIndex = -1;
        this.myDropDownList.ClearSelection();

        this.myDropDownList.Items.Add("Item1");
        this.myDropDownList.Items.Add("Item2");
    }

Dès que j'ajoute un élément dans DropDown, son SelectedIndex devient 0 et ne peut plus être défini sur -1 (j'ai essayé d'appeler SelectedIndex après avoir ajouté des éléments également) ... Qu'est-ce que je fais de travers? Une aide de fourmi serait appréciée!

Était-ce utile?

La solution

Bare in mind myDropDownList.Items.Add ajoutera un nouvel élément Listitem si vous l'appelez après avoir passé un appel à DataSource / DataBind, utilisez donc la méthode myDropDownList.Items.Insert, par exemple ...

myDropDownList.DataSource = DataAccess.GetDropDownItems(); // Psuedo Code
myDropDownList.DataTextField = "Value";
myDropDownList.DataValueField = "Id";
myDropDownList.DataBind();

myDropDownList.Items.Insert(0, new ListItem("Please select", ""));

Ajoutera le menu déroulant "Veuillez sélectionner" en haut.

Et comme mentionné, il y aura toujours exactement un élément sélectionné dans une liste déroulante (les ListBox sont différents, je crois), et celui par défaut est le premier si aucun n'est explicitement sélectionné.

Autres conseils

Il est possible de définir la propriété selectedIndex de DropDownList sur -1 (c'est-à-dire, la sélection effacée) à l'aide d'un script côté client:

<form id="form1" runat="server">
    <asp:DropDownList ID="DropDownList1" runat="server">
        <asp:ListItem Value="A"></asp:ListItem>
        <asp:ListItem Value="B"></asp:ListItem>
        <asp:ListItem Value="C"></asp:ListItem>
    </asp:DropDownList>
    <button id="СlearButton">Clear</button>
</form>

<script src="jquery-1.2.6.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function()
    {
        $("#СlearButton").click(function()
        {
            $("#DropDownList1").attr("selectedIndex", -1); // pay attention to property casing
        })

        $("#ClearButton").click();
    })
</script>

Je lis ce qui suit: http://msdn.microsoft.com/en-us/library/a5kfekd2. aspx

Il est écrit: Pour obtenir la valeur d'index de l'élément sélectionné, lisez la valeur de la propriété SelectedIndex. L'indice est basé sur zéro. Si rien n'a été sélectionné, la valeur de la propriété est -1.

Dans le même temps, à http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.dropdownlist.selectedindex (VS.80) .aspx , nous voyons:

Utilisez la propriété SelectedIndex pour spécifier ou déterminer par programme l’index de l’élément sélectionné à partir du contrôle DropDownList. Un élément est toujours sélectionné dans le contrôle DropDownList. Vous ne pouvez pas effacer la sélection de chaque élément de la liste en même temps.

Peut-être -1 est-il valide uniquement pour obtenir et non pour définir l'index? Si c'est le cas, j'utiliserai votre "patch".

Je suis presque sûr que la liste déroulante doit avoir un élément sélectionné; J'ajoute généralement un élément de liste vide

this.myDropDownList.Items.Add ("");

En tant que premier élément de la liste, et procédez en conséquence.

selectedIndex ne peut être que -1 lorsque le contrôle est initialisé et qu'il n'y a aucun élément dans la collection.

Il n'est pas possible qu'aucun élément ne soit sélectionné dans une liste déroulante Web, contrairement à ce qui se passe sous WinForm.

Je trouve qu'il est préférable d'avoir: this.myDropDownList.Items.Add (new ListItem ("Veuillez sélectionner ...", "" "));

De cette façon, je signale à l'utilisateur qu'il doit sélectionner un élément et vous pouvez cocher SelectedIndex == 0 pour valider

.
  1. Créez votre liste déroulante et spécifiez un ListItem initial
  2. Définissez AppendDataBoundItems sur true afin que les nouveaux éléments soient ajoutés.
<asp:DropDownList ID="YourID" DataSourceID="DSID" AppendDataBoundItems="true"> 
<asp:ListItem Text="All" Value="%"></asp:ListItem> 
</asp:DropDownList>

Essayez la syntaxe ci-dessous:

DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("Select"))

ou

DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText("SelectText"))

ou

DropDownList1.Items.FindByText("Select").selected =true

Pour plus d'informations: http://vimalpatelsai.blogspot.in/2012/07/dropdownlistselectedindex-1 -problem.html

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