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

128

Pourquoi la liste déroulante ne montre-t-elle pas d'abord mon élément vierge? 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 Generig List, cela pourrait-il être le coupable?

Saif Khan
la source

Réponses:

275

Après votre databind:

drpList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
drpList.SelectedIndex = 0;
JasonS
la source
Vous pouvez également instancier un ListItem, définir sa propriété Selected sur true, puis l'insérer dans drpList comme ci-dessus.
skia.heliou
3
Cela peut aider ceux qui recherchent une réponse à travailler avec les données sqlDataSource Dans mon cas, j'ai également dû ajouter drpList.AppendDataBoundItems = true; pour le lier aux données actuelles dans la méthode Page
Load
30

Vous pouvez utiliser AppendDataBoundItems=truepour ajouter facilement:

<asp:DropDownList ID="drpList" AppendDataBoundItems="true" runat="server"><br/>
    <asp:ListItem Text="" Value="" /><br/>
</asp:DropDownList>
ayhtut
la source
1
VS n'aime pas la balise <br /> et ça marche pour moi sans elle. C'est une option tellement propre, je ne sais pas pourquoi elle n'a pas plus de votes.
Tony L.
A travaillé comme un charme. Merci pour la solution de conception.
DataCat Robin
3
N'oubliez pas de définir Selected = "true"
Fandango68
24

La liaison de données a lieu une fois que vous avez ajouté votre élément de liste vide et 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.

ÉDITER:

Après avoir effectué une recherche rapide sur Google à partir d'ASP.Net 2.0, il existe une véritable propriété "AppendDataBoundItems" que vous pouvez définir pour ... ajouter les éléments liés aux données.

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

Fouet
la source
4
Vous devez faire attention à ce que votre liste déroulante augmente après chaque publication en ajoutant les mêmes données encore et encore.
Keith Sirmons
L'élément vierge n'est-il pas là, ou là, mais tout simplement pas sélectionné?
Fouet
Cela fonctionnerait si vous aviez le blanc dans votre balisage .aspx, puis lié dans le code derrière.
John Sheehan
13

Je pense qu'une meilleure façon est d'insérer d'abord l'élément vierge, puis de lier les données comme vous l'avez fait. Cependant, vous devez définir la AppendDataBoundItemspropriété 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();
}
Andy McCluggage
la source
7

Comme "Whisk" Said, l'astuce est 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 "Whisk"


la source
5

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

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

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

Steven A. Lowe
la source
quand je fais cela, la ligne vide apparaît en bas.
Saif Khan
Vous pouvez spécifier l'index dans lequel insérer. Regardez la solution de JasonS.
AndyG
@ [Saif Khan]: et si cela ne fonctionne pas, insérez la ligne vide dans votre source de données, puis databind
Steven A. Lowe
3

Facile

enfin

ddlProducer.Items.Insert(0, "");
Umesh
la source
1

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)

Chưa biết
la source
0

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

select '' value, '' name
union
select value, name from mytable
CINCHAPPS
la source
Avec le recul, je ne recommanderais pas cette méthode, sauf uniquement comme alternative. J'aime l'événement par souci de flexibilité (OnDataBound = "mydropdown_DataBound"), mais dans mon cas actuel, j'adopte le (AppendDataBoundItems = "true") par souci de simplicité.
CINCHAPPS