2008-11-05 1 views
118

Почему выпадающий список не показывает мой пустой элемент в первую очередь? Вот что у меня естьAsp.net - Добавить пустой элемент в верхней части выпадающего списка

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

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

Редактировать ~ Я привязываюсь к списку генераторов, может ли это быть виновником?

+1

Это относится к: http://stackoverflow.com/questions/983716/asp-net-dropdownlist-add-blank-line-before-db-values ​​ – mcfea 2014-04-16 23:19:21

ответ

248

После Вашего DataBind:

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

похоже, что вы добавляете пустой элемент, а затем привязываете данные, которые опустошают список; попробуйте вставить пустой элемент после привязки данных

+0

, когда я это делаю, пустая строка появляется внизу. – 2008-11-05 23:04:59

+0

Вы можете указать индекс для вставки. Посмотрите на решение JasonS. – AndyG 2008-11-05 23:06:50

+0

@ [Saif Khan]: и если это не сработает, вставьте пустую строку в ваш источник данных, затем databind – 2008-11-05 23:08:17

24

Связывание данных происходит после того, как вы добавили свой пустой элемент списка, и он заменяет то, что уже существует, вам нужно добавить пустой элемент в начало списка с вашего контроллера или добавьте его после привязки данных.

EDIT:

После этого быстро прибегая к помощи в ASP.NET 2.0 есть более «AppendDataBoundItems» истинное свойство, которое вы можете установить в ... добавить элементы DataBound.

подробнее см

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

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

+0

Я попытался установить это уже в true, но не работает. – 2008-11-05 23:06:24

+3

Думайте, что вам нужно следить за тем, чтобы ваш раскрывающийся список увеличивался после каждого возврата, добавляя одни и те же данные снова и снова. – 2008-11-05 23:07:12

+0

Является ли пустой элемент не там, или там, но только не выбран? – Whisk 2008-11-05 23:07:39

5

Сделайте свою привязку данных, а затем добавить следующее:

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

Я думаю, что лучший способ - сначала вставить пустой элемент, а затем привязать данные так же, как вы делали. Однако вам необходимо установить свойство AppendDataBoundItems элемента управления списком.

Мы используем следующий способ привязки любого источника данных к любому элементу управления списком ...

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(); 
} 
6

Как "венчик" Сказал, трюк в "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; 
    } 
} 

Спасибо "метелка"

3

простого

наконец

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

Вы можете использовать AppendDataBoundItems=true легко добавить:

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

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

ОКН 1:

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

ddlCategory.DataBind();

ОКН 2:

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

(Испытано OK)

0

Вы можете также объединение заготовки выбрать с выбора, который имеет содержание:

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