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?
Après votre databind:
drpList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
drpList.SelectedIndex = 0;
Vous pouvez utiliser AppendDataBoundItems=true
pour ajouter facilement:
<asp:DropDownList ID="drpList" AppendDataBoundItems="true" runat="server"><br/>
<asp:ListItem Text="" Value="" /><br/>
</asp:DropDownList>
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
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();
}
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"
Faites votre liaison de données puis ajoutez ce qui suit:
Dim liFirst As New ListItem("", "")
drpList.Items.Insert(0, liFirst)
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
facile
enfin
ddlProducer.Items.Insert(0, "");
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)
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