Pergunta

Eu só quero uma ASP.NET DropDownList com nenhum item selecionado.Definição SelectedIndex -1 é, sem sucesso, até agora.Eu estou usando o Framework 3.5 com AJAX, i.é.este DropDownList é dentro de um UpdatePanel.Aqui está o que eu estou fazendo:

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

No momento em que eu adicionar um elemento na lista Pendente, a sua SelectedIndex alterações a 0 e não pode ser mais definido como -1 (eu tentei ligar SelectedIndex depois de adicionar itens bem)...O que eu estou fazendo de errado?Ant ajuda seria apreciada!

Foi útil?

Solução

Tenha em mente que myDropDownList.Itens.Adicionar irá adicionar uma nova Listitem elemento no fundo, se você chamá-lo após a realização de uma origem de dados/DataBind chamada, de modo a utilizar myDropDownList.Itens.Método de inserção em vez disso, por exemplo...

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

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

Irá adicionar o 'por Favor, selecione' suspenso item para o topo.

E, como mencionado, sempre haverá exatamente um Item selecionado em um menu drop down (caixas de listagem são diferentes, eu acredito), e este padrão para o topo, se nenhum estiver selecionado explicitamente.

Outras dicas

É possível definir selectedIndex propriedade de DropDownList para -1 (i.e.limpar seleção) usando o script do lado do 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>

Eu estou lendo o seguinte:http://msdn.microsoft.com/en-us/library/a5kfekd2.aspx

Ele diz:Para obter o valor de índice do item selecionado, ler o valor da propriedade SelectedIndex.O índice é baseado em zero.Se nada tiver sido selecionado, o valor da propriedade é-1.

Ao mesmo tempo, em http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.dropdownlist.selectedindex(VS.80).aspx vamos ver:

Use a propriedade SelectedIndex programaticamente especificar ou determinar o índice do item selecionado a partir do controle DropDownList.Um item que sempre é selecionado no controle DropDownList.Você não pode desmarcar a seleção de cada item na lista ao mesmo tempo.

Talvez -1 é válido apenas para ficar e não para definição do índice?Se assim for, eu vou usar o seu 'patch'.

Eu tenho certeza de que suspensa tem que ter algum item selecionado;Eu costumo adicionar um item de lista vazia

isso.myDropDownList.Itens.Adicionar("");

Como meu primeiro item da lista, e proceda em conformidade.

O selectedIndex só pode ser -1 quando o controle é o primeiro initalised e não há itens na coleção.

Não é possível ter nenhum item selecionado em uma web de lista suspensa como você faria em um WinForm.

Eu acho que é melhor ter:isso.myDropDownList.Itens.Add(new ListItem("selecione...", ""));

Desta forma, eu transmitir para o usuário de que eles precisam para selecionar um item, e você pode verificar SelectedIndex == 0 para validar

  1. Criar a sua lista e especifique um ListItem inicial
  2. Conjunto AppendDataBoundItems para true para que novos itens podem ser acrescentados.
<asp:DropDownList ID="YourID" DataSourceID="DSID" AppendDataBoundItems="true"> 
<asp:ListItem Text="All" Value="%"></asp:ListItem> 
</asp:DropDownList>

Por favor, tente seguir a sintaxe:

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

Para mais informações :http://vimalpatelsai.blogspot.in/2012/07/dropdownlistselectedindex-1-problem.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top