Problema "DropDownList.SelectedIndex = -1".
-
09-06-2019 - |
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!
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
- Crea il tuo elenco DropDown e specifica un ListItem iniziale
- Impostato
AppendDataBoundItems
Atrue
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