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


128

Почему в раскрывающемся списке сначала не отображается мой пустой элемент? Вот что у меня есть

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

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

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


1
Это относится к: stackoverflow.com/questions/983716/…
mcfea

Ответы:


275

После вашей привязки данных:

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

Кроме того, вы можете создать экземпляр ListItem, установить для его свойства Selected значение true, а затем вставить его в drpList, как указано выше.
skia.heliou

3
Это может помочь тем, кто ищет ответ для работы с данными sqlDataSource. В моем случае мне также пришлось добавить drpList.AppendDataBoundItems = true; привязать его к текущим данным в методе Page_Load
sabastienfyrre

30

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

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

1
VS не любит тег <br />, и у меня он работает без него. Это такой чистый вариант, я не знаю, почему у него нет больше голосов.
Тони Л.

Работал как шарм. Спасибо за дизайнерское решение.
DataCat Робин,

3
Не забудьте установить Selected = "true"
Fandango68

24

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

РЕДАКТИРОВАТЬ:

После быстрого поиска в Google, начиная с ASP.Net 2.0, появляется свойство "AppendDataBoundItems" true, которое вы можете установить для ... добавления элементов привязки к данным.

подробности см.

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

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


4
Можно подумать, что вам нужно следить за тем, чтобы раскрывающийся список увеличивался после каждой обратной передачи, добавляя одни и те же данные снова и снова.
Кейт Сирмонс

Пустой элемент отсутствует или просто не выбран?
Whisk

Это сработало бы, если бы у вас в разметке .aspx был пустой, а затем привязанный код.
Джон Шиэн

13

Я думаю, что лучший способ - сначала вставить пустой элемент, а затем привязать данные, как вы это делали. Однако вам необходимо установить 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();
}

7

Как сказал "Венчик", уловка заключается в свойстве "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;
    }
}

Спасибо "Венчик"


5

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

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

3

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


когда я это сделаю, внизу появится пустая строка.
Саиф Хан

Вы можете указать индекс для вставки. Посмотрите на решение JasonS.
AndyG

@ [Саиф Хан]: и если это не сработает, вставьте пустую строку в свой источник данных, затем привязку данных
Стивен А. Лоу


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"));

(Проверено ОК)


0

У вас также может быть объединение пустого выбора с выбором, у которого есть контент:

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

Оглядываясь назад, я бы рекомендовал этот метод только в качестве альтернативы. Мне нравится это событие ради гибкости (OnDataBound = "mydropdown_DataBound"), но в моем текущем случае я использую (AppendDataBoundItems = "true") для простоты.
CINCHAPPS
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.