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.