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?

Saif Khan
źródło
1
Dotyczy to: stackoverflow.com/questions/983716/ ...
mcfea Kwietnia

Odpowiedzi:

276

Po powiązaniu z danymi:

drpList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
drpList.SelectedIndex = 0;
JasonS
źródło
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>
ayhtut
źródło
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

Śmigać
źródło
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();
}
Andy McCluggage
źródło
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”


źródło
5

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

Dim liFirst As New ListItem("", "")
drpList.Items.Insert(0, liFirst)
Dillie-O
źródło
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

Steven A. Lowe
źródło
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
3

prosty

w końcu

ddlProducer.Items.Insert(0, "");
Umesh
źródło
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)

Chưa biết
źródło
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
BitsAndBytes
źródło
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