Asp.net - Adicione um item em branco no topo da lista suspensa


128

Por que o menu suspenso não mostra meu item em branco primeiro? Aqui está o que eu tenho

drpList.Items.Add(New ListItem("", ""))

With drpList
    .DataSource = myController.GetList(userid)
    .DataTextField = "Name"
    .DataValueField = "ID"
    .DataBind()
End With

Editar ~ Estou vinculando a uma lista Generig, este poderia ser o culpado?


Respostas:


274

Após sua ligação de dados:

drpList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
drpList.SelectedIndex = 0;

Como alternativa, você pode instanciar um ListItem, definir sua propriedade Selected como true e, em seguida, inseri-lo no drpList como acima.
Skip.heliou

3
Isso pode ajudar quem procura uma resposta para trabalhar com dados sqlDataSource No meu caso, também tive que adicionar drpList.AppendDataBoundItems = true; a ligá-la aos dados actuais no método Page_Load
sabastienfyrre

29

Você pode usar AppendDataBoundItems=truepara adicionar facilmente:

<asp:DropDownList ID="drpList" AppendDataBoundItems="true" runat="server"><br/>
    <asp:ListItem Text="" Value="" /><br/>
</asp:DropDownList>

1
O VS não gosta da tag <br /> e funciona para mim sem ela. Essa é uma opção tão limpa que não sei por que ela não tem mais votos.
Tony L.

Funcionou como um encanto. Obrigado pela solução do tempo de design.
DataCat Robin

3
Não se esqueça de definir Selected = "true"
Fandango68

24

A ligação de dados ocorre depois que você adiciona o item da lista em branco e substitui o que já existe, você precisa adicionar o item em branco ao início da lista do seu controlador ou adicioná-lo após a ligação de dados.

EDITAR:

Depois de pesquisar isso rapidamente no ASP.Net 2.0, há uma propriedade verdadeira "AppendDataBoundItems" que você pode definir para ... acrescentar os itens do banco de dados.

para detalhes veja

http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=281 ou

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.appenddatabounditems.aspx


4
Um pensamento que você precisa observar é aumentar sua lista suspensa após cada postagem, acrescentando os mesmos dados repetidamente.
Keith Sirmons

O item em branco não está lá, ou está lá, mas simplesmente não está selecionado?
Bata

Isso funcionaria se você tivesse o espaço em branco na sua marcação .aspx e vinculado ao código por trás.
John Sheehan

13

Eu acho que a melhor maneira é inserir o item em branco primeiro e depois vincular os dados exatamente como você está fazendo. No entanto, você precisa definir a AppendDataBoundItemspropriedade do controle de lista.

Usamos o seguinte método para vincular qualquer fonte de dados a qualquer controle de lista ...

public static void BindList(ListControl list, IEnumerable datasource, string valueName, string textName)
{
    list.Items.Clear();
    list.Items.Add("", "");
    list.AppendDataBoundItems = true;
    list.DataValueField = valueName;
    list.DataTextField = textName;
    list.DataSource = datasource;
    list.DataBind();
}

7

Como "Whisk" Said, o truque está na propriedade "AppendDataBoundItems"

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DropDownList1.AppendDataBoundItems = true;
        DropDownList1.Items.Insert(0, new ListItem(String.Empty, String.Empty));
        DropDownList1.SelectedIndex = 0;
    }
}

Obrigado "Whisk"


5

Faça a ligação de dados e adicione o seguinte:

Dim liFirst As New ListItem("", "")
drpList.Items.Insert(0, liFirst)

3

parece que você está adicionando um item em branco e depois vinculando os dados, o que esvaziaria a lista; tente inserir o item em branco após a ligação de dados


quando faço isso, a linha em branco aparece na parte inferior.
Saif Khan

Você pode especificar o índice para inserir. Veja a solução do JasonS.
AndyG 5/11

@ [Saif Khan]: e se isso não funcionar, insira a linha em branco em sua fonte de dados, em seguida, vincular
Steven A. Lowe

3

simples

Finalmente

ddlProducer.Items.Insert(0, "");

1

ddlCategory.DataSource = ds;
ddlCategory.DataTextField = "CatName";
ddlCategory.DataValueField = "CatID";

Capítulo 1:

ddlCategory.Items.Add(new ListItem("--please select--", "-1"));
ddlCategory.AppendDataBoundItems = true;
ddlCategory.SelectedIndex = -1;

ddlCategory.DataBind();

Capítulo 2:

ddlCategory.Items.Insert(0, new ListItem("-- please select --", "0"));

(OK testado)


0

Você também pode ter uma união da seleção em branco com a seleção que possui conteúdo:

select '' value, '' name
union
select value, name from mytable

Olhando para trás, eu não recomendaria esse método, exceto apenas como alternativa. Gosto do evento por flexibilidade (OnDataBound = "mydropdown_DataBound"), mas no meu caso atual, estou adotando o (AppendDataBoundItems = "true") por uma questão de simplicidade.
CINCHAPPS 03/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.