Domanda

Voglio solo un DropDownList ASP.NET senza elementi selezionati.L'impostazione di SelectedIndex su -1 non ha avuto alcuna utilità, finora.Sto usando Framework 3.5 con AJAX, cioèquesto DropDownList si trova all'interno di un UpdatePanel.Ecco cosa sto facendo:

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

Nel momento in cui aggiungo un elemento nel DropDown, il suo SelectedIndex cambia in 0 e non può più essere impostato su -1 (ho provato a chiamare SelectedIndex anche dopo aver aggiunto elementi)...Cosa sto facendo di sbagliato?L'aiuto delle formiche sarebbe apprezzato!

È stato utile?

Soluzione

Tieni presente che myDropDownList.Items.Add aggiungerà un nuovo elemento Listitem in fondo se lo chiami dopo aver eseguito una chiamata DataSource/DataBind, quindi utilizza invece il metodo myDropDownList.Items.Insert, ad esempio...

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

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

Aggiungerà l'elemento a discesa "Seleziona" in alto.

E come accennato, ci sarà sempre esattamente un elemento selezionato in un menu a discesa (credo che i ListBox siano diversi), e questo per impostazione predefinita è quello in alto se nessuno è selezionato esplicitamente.

Altri suggerimenti

E' possibile impostare indice selezionato proprietà di Menu `A tendina a -1 (es.e.cancellare la selezione) utilizzando lo script lato 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>

Sto leggendo quanto segue:http://msdn.microsoft.com/en-us/library/a5kfekd2.aspx

Dice:Per ottenere il valore dell'indice dell'elemento selezionato, leggere il valore della proprietà SelectedIndex.L'indice è a base zero.Se non è stato selezionato nulla, il valore della proprietà è -1.

Nello stesso tempo, a http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.dropdownlist.selectedindex(VS.80).aspx vediamo:

Utilizzare la proprietà SelectedIndex per specificare o determinare a livello di codice l'indice dell'elemento selezionato dal controllo DropDownList.Un elemento è sempre selezionato nel controllo DropDownList.Non è possibile cancellare la selezione da ogni elemento dell'elenco contemporaneamente.

Forse -1 è valido solo per ottenere e non per impostare l'indice?Se è così, userò la tua "patch".

Sono abbastanza sicuro che nel menu a discesa debba essere selezionato qualche elemento;Di solito aggiungo una voce di elenco vuota

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

Come prima voce dell'elenco e procedi di conseguenza.

SelectedIndex può essere -1 solo quando il controllo viene inizializzato per la prima volta e non sono presenti elementi nella raccolta.

Non è possibile non selezionare alcun elemento in un elenco a discesa Web come faresti su WinForm.

Trovo che sia meglio avere:this.myDropDownList.Items.Add(new ListItem("Seleziona...", ""));

In questo modo comunico all'utente che deve selezionare un elemento e puoi controllare SelectedIndex == 0 per convalidare

  1. Crea il tuo elenco DropDown e specifica un ListItem iniziale
  2. Impostato AppendDataBoundItems A true in modo che i nuovi elementi vengano aggiunti.
<asp:DropDownList ID="YourID" DataSourceID="DSID" AppendDataBoundItems="true"> 
<asp:ListItem Text="All" Value="%"></asp:ListItem> 
</asp:DropDownList>

Prova la sintassi seguente:

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

Per maggiori informazioni :http://vimalpatelsai.blogspot.in/2012/07/dropdownlistselectedindex-1-problem.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top