2008-09-17 6 views
8

Je veux juste un DropDownList ASP.NET avec aucun élément sélectionné. Définir SelectedIndex à -1 ne sert à rien, 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:"DropDownList.SelectedIndex = -1" problème

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"); 
    } 

Le moment ajouter un élément dans le menu déroulant, ses changements de SelectedIndex à 0 et peut être plus mis à -1 (j'ai essayé d'appeler SelectedIndex après avoir ajouté des éléments aussi bien) ... Qu'est ce que je fais mal? L'aide de fourmi serait appréciée!

Répondre

17

nu à l'esprit myDropDownList.Items.Add ajoutera un nouvel élément listItem au fond si vous appelez après avoir effectué une DataSource/DataBind appellent donc utiliser la méthode myDropDownList.Items.Insert au lieu par exemple ...

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

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

Ajout de l'élément déroulant "Veuillez sélectionner" en haut de la page. Et comme mentionné précédemment, il y aura toujours exactement un élément sélectionné dans une liste déroulante (les ListBox sont différents je crois), et celui-ci vaut par défaut le premier si aucun n'est sélectionné explicitement.

2

Je suis 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 ("");

Comme mon premier élément de liste, et procéder en conséquence.

2

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

Il est impossible de ne sélectionner aucun élément dans une liste déroulante Web comme vous le feriez sur un formulaire WinForm.

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

De cette façon, je transmets à l'utilisateur dont ils ont besoin pour sélectionner un élément, et vous pouvez vérifier SelectedIndex == 0 pour valider

4

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

Il dit: Pour obtenir la valeur d'index de l'élément sélectionné, lisez la valeur de la propriété SelectedIndex. L'index 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 un programme ou déterminer l'index de l'élément sélectionné dans le 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 que -1 est valide juste pour obtenir et non pour définir l'index? Si oui, je vais utiliser votre 'patch'.

5

Il est possible de définir selectedIndex propriété de DropDownList -1 (i. E.Effacer la sélection) en utilisant 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> 
+3

petit commentaire: avec jQuery 1.6 ou plus récent, $ (élém) .attr ("selectedIndex") ne fonctionnera plus, parce que selectedIndex est une propriété, pas un attribut. Utilisez $ (emel) .prop ("selectedIndex", -1) à la place. – qualbeen

0

S'il vous plaît essayer ci-dessous la syntaxe:

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

2
  1. Création d'une liste déroulante et spécifiez un ListItem initial
  2. Set AppendDataBoundItems à true afin que les éléments s'ajoutés.
<asp:DropDownList ID="YourID" DataSourceID="DSID" AppendDataBoundItems="true"> 
<asp:ListItem Text="All" Value="%"></asp:ListItem> 
</asp:DropDownList> 
Questions connexes