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?

Saif Khan
fonte
1
Este refere-se a: stackoverflow.com/questions/983716/...
mcfea

Respostas:

274

Após sua ligação de dados:

drpList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
drpList.SelectedIndex = 0;
JasonS
fonte
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>
ayhtut
fonte
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

Whisk
fonte
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();
}
Andy McCluggage
fonte
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"


fonte
5

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

Dim liFirst As New ListItem("", "")
drpList.Items.Insert(0, liFirst)
Dillie-O
fonte
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

Steven A. Lowe
fonte
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, "");
Umesh
fonte
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)

Chưa biết
fonte
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
CINCHAPPS
fonte
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