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

Відповіді:


274

Після введення даних:

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

Ви також можете створити ListItem, встановити його вибране властивість на істинне, а потім вставити його в drpList, як зазначено вище.
skia.heliou

3
Це може допомогти тим, хто шукає відповідь для роботи з даними sqlDataSource У моєму випадку мені також довелося додати drpList.AppendDataBoundItems = true; прив’язати їх до поточних даних методом
Page_Load

29

Ви можете AppendDataBoundItems=trueлегко додати:

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

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

Працював як шарм. Дякуємо за рішення в часі дизайну.
DataCat Робін

3
Не забудьте встановити Вибране = "вірно"
Fandango68

24

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

Редагувати:

Після швидкого гуглінгу в ASP.Net 2.0 з'являється справжня властивість "AppendDataBoundItems", яку ви можете встановити ... додавати елементи, пов'язані з даними.

Детальніше див

http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=281 або

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


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

Чи порожній предмет не там, або там, але просто не вибрано?
Збийте

Це спрацює, якби у вас була порожня частина у вашій розмітці .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

Як і "Whisk" Саїд, фокус у властивості "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";

Чаш 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 = "справжній") для простоти.
CINCHAPPS
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.