2008-09-17 8 views
8

Solo quiero una DropDownList de ASP.NET sin elemento seleccionado. Establecer SelectedIndex en -1 no sirve, hasta el momento. Estoy utilizando Framework 3.5 con AJAX, es decir, esta DropDownList está dentro de un UpdatePanel. Aquí es lo que estoy haciendo:"DropDownList.SelectedIndex = -1" problema

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

En el momento que añadir un elemento en el menú desplegable, sus SelectedIndex pasa a 0 y no puede ser más establece en -1 (intenté llamar SelectedIndex después de añadir elementos, así) ... ¿Que estoy haciendo mal? ¡La ayuda de la hormiga sería apreciada!

Respuesta

17

Desnudo en cuenta myDropDownList.Items.Add añadirá un nuevo elemento ListItem en la parte inferior si se llama a que después de realizar un origen de datos/DataBind llamada para el uso del método myDropDownList.Items.Insert lugar por ejemplo ...

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

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

Agregará el elemento desplegable "Seleccione" a la parte superior.

Y como se mencionó, siempre habrá exactamente un elemento seleccionado en un menú desplegable (en mi opinión, los ListBoxes son diferentes), y este será el primero si no se selecciona explícitamente ninguno.

2

Estoy bastante seguro de que el menú desplegable debe tener algún elemento seleccionado; Normalmente agrego un elemento de la lista vacía

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

Como mi primer elemento de la lista, y procedo en consecuencia.

2

El selectedIndex solo puede ser -1 cuando el control se inicializa por primera vez y no hay elementos dentro de la colección.

No es posible tener ningún elemento seleccionado en una lista desplegable web como lo haría en un WinForm.

Creo que es mejor tener: this.myDropDownList.Items.Add (new ListItem ("Seleccione ...", ""));

De esta manera transmito al usuario que necesitan para seleccionar un elemento, y se puede comprobar SelectedIndex == 0 para validar

4

Estoy leyendo el siguiente: http://msdn.microsoft.com/en-us/library/a5kfekd2.aspx

Dice: Para obtener el valor del índice del elemento seleccionado, leer el valor de la propiedad SelectedIndex. El índice está basado en cero. Si no se ha seleccionado nada, el valor de la propiedad es -1.

En el mismo tiempo, al ver que http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.dropdownlist.selectedindex(VS.80).aspx:

utilizar la propiedad SelectedIndex para especificar mediante programación o determinar el índice del elemento seleccionado en el control DropDownList. Un elemento siempre se selecciona en el control DropDownList. No puede borrar la selección de cada elemento de la lista al mismo tiempo.

Quizás -1 es válido solo para obtener y no para establecer el índice? Si es así, usaré tu 'parche'.

5

Es posible establecer selectedIndex propiedad de DropDownList a -1 (i. E.Borrar selección) mediante secuencias de comandos del lado del cliente:

<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

pequeño comentario: con jQuery 1.6 o posterior, $ (elem) .attr ("selectedIndex") no funcionará más, porque selectedIndex es una propiedad, no un atributo. Use $ (emel) .prop ("selectedIndex", -1) en su lugar. – qualbeen

0

Por favor, intente más adelante sintaxis:

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

o

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

o

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

Para más información: http://vimalpatelsai.blogspot.in/2012/07/dropdownlistselectedindex-1-problem.html

2
  1. crear su lista desplegable y especificar un ListItem inicial
  2. Establecer AppendDataBoundItems a true de modo que los nuevos elementos se anexan.
<asp:DropDownList ID="YourID" DataSourceID="DSID" AppendDataBoundItems="true"> 
<asp:ListItem Text="All" Value="%"></asp:ListItem> 
</asp:DropDownList> 
Cuestiones relacionadas