Asp.net - Dodaj pusty element u góry listy rozwijanej


130

Dlaczego lista rozwijana nie pokazuje najpierw mojego pustego elementu? Oto co mam

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

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

Edytuj ~ Jestem powiązany z listą Generig, czy to może być winowajca?


Odpowiedzi:


276

Po powiązaniu z danymi:

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

Alternatywnie możesz utworzyć wystąpienie ListItem, ustawić jego właściwość Selected na true, a następnie wstawić ją do drpList, jak powyżej.
skia.heliou

3
Może to pomóc tym, którzy szukają odpowiedzi do pracy z danymi sqlDataSource. W moim przypadku musiałem również dodać drpList.AppendDataBoundItems = true; aby powiązać go z bieżącymi danymi w metodzie Page_Load
sabastienfyrre

31

Możesz użyć, AppendDataBoundItems=trueaby łatwo dodać:

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

1
VS nie lubi tagu <br /> i działa bez niego. To taka czysta opcja, nie wiem, dlaczego nie ma więcej głosów.
Tony L.

Działał jak urok. Dzięki za rozwiązanie czasu projektowania.
DataCat Robin

3
Nie zapomnij ustawić Selected = "true"
Fandango68,

24

Wiązanie z danymi ma miejsce po dodaniu pustego elementu listy i zastępuje to, co już istnieje, należy dodać pusty element na początek listy ze swojego kontrolera lub dodać go po powiązaniu z danymi.

EDYTOWAĆ:

Po wygooglowaniu tego szybko, jak w ASP.Net 2.0, istnieje prawdziwa właściwość „AppendDataBoundItems”, którą można ustawić na… dołączanie elementów z danymi.

szczegóły patrz

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

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


4
Jedną z rzeczy, na które musisz uważać, jest rozwijanie listy rozwijanej po każdym ogłoszeniu zwrotnym poprzez ciągłe dodawanie tych samych danych.
Keith Sirmons,

Czy nie ma pustej pozycji, czy jest tam, ale po prostu nie została wybrana?
Trzepaczka

To zadziałałoby, gdybyś miał pusty znacznik w swoim znaczniku .aspx, a następnie związany z kodem.
John Sheehan,

13

Myślę, że lepszym sposobem jest najpierw wstawienie pustego elementu, a następnie powiązanie danych, tak jak robiłeś. Jednak musisz ustawićAppendDataBoundItems właściwość kontrolki listy.

Używamy następującej metody, aby powiązać dowolne źródło danych z dowolną kontrolką listy ...

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

8

Podobnie jak „Whisk” Said, sztuczka tkwi we właściwości „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;
    }
}

Dzięki „Trzepaczka”


5

Wykonaj powiązanie danych, a następnie dodaj następujące elementy:

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

3

wygląda na to, że dodajesz pustą pozycję, a następnie powiązanie z danymi, co spowoduje opróżnienie listy; spróbuj wstawić pusty element po powiązaniu danych


kiedy to robię, na dole pojawia się pusty wiersz.
Saif Khan

Możesz określić indeks do wstawienia. Spójrz na rozwiązanie JasonSa.
AndyG

@ [Saif Khan]: a jeśli to nie zadziała, wstaw pusty wiersz do źródła danych, a następnie indeksowanie danych
Steven A. Lowe


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

(Testowane OK)


0

Możesz również mieć połączenie pustego zaznaczenia z zaznaczeniem, które ma zawartość:

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

Patrząc wstecz, nie polecałbym tej metody, chyba że jako alternatywa. Lubię to zdarzenie ze względu na elastyczność (OnDataBound = "mydropdown_DataBound"), ale w moim obecnym przypadku przyjmuję (AppendDataBoundItems = "true") ze względu na prostotę.
BitsAndBytes
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.