web-dev-qa-db-fra.com

Asp.net - Ajouter un élément vide en haut de la liste déroulante

Pourquoi la liste déroulante ne montre-t-elle pas mon article vierge en premier? Voici ce que j'ai

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

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

Edit ~ Je suis lié à une liste générique, est-ce que cela pourrait être le coupable?

125
Saif Khan

Après votre databind:

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

Vous pouvez utiliser AppendDataBoundItems=true pour ajouter facilement:

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

La liaison de données a lieu une fois que vous avez ajouté votre élément de liste vierge, et elle remplace ce qui existe déjà. Vous devez ajouter l’élément vide au début de la liste à partir de votre contrôleur ou l’ajouter après la liaison de données.

MODIFIER:

Après avoir rapidement recherché Google à partir d’ASP.Net 2.0, il existe une propriété true "AppendDataBoundItems" que vous pouvez définir pour ... ajouter les éléments databound.

pour plus de détails voir

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

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

24
Whisk

Je pense qu’un meilleur moyen consiste à insérer d’abord l’élément vierge, puis à lier les données comme vous l’avez fait. Toutefois, vous devez définir la propriété AppendDataBoundItems du contrôle de liste.

Nous utilisons la méthode suivante pour lier n’importe quelle source de données à n’importe quel contrôle de liste ...

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();
}
13
Andy McCluggage

Comme "Fouet", l'astuce se trouve dans la propriété "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;
    }
}

Merci "fouet"

6
user492376

Faites votre liaison de données puis ajoutez ce qui suit:

Dim liFirst As New ListItem("", "")
drpList.Items.Insert(0, liFirst)
5
Dillie-O

il semble que vous ajoutiez un élément vide, puis une liaison de données, ce qui viderait la liste; essayez d'insérer l'élément vierge après la liaison de données

3
Steven A. Lowe

facile

enfin

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

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

Cách 1:

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

ddlCategory.DataBind();

Cách 2:

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

(Testé OK)

1
Chưa biết

Vous pouvez également avoir une union de la sélection vide avec la sélection qui a un contenu:

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