Asp.net - Açılır listenin en üstüne boş öğe ekle


128

Açılır menü neden ilk olarak boş öğemi göstermiyor? İşte sahip olduğum şey

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

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

Edit ~ Bir Generig Listesine bağlıyım, suçlu bu olabilir mi?


1
Bu,
şununla

Yanıtlar:


275

Veri bağlantınızdan sonra:

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

Alternatif olarak, bir ListItem başlatabilir, Selected özelliğini true olarak ayarlayabilir ve ardından yukarıdaki gibi drpList'e ekleyebilirsiniz.
skia.heliou

3
Bu, sqlDataSource verileriyle çalışmak için bir yanıt arayanlara yardımcı olabilir Benim durumumda, drpList.AppendDataBoundItems = true; Page_Load yöntemindeki mevcut verilere bağlamak için
sabastienfyrre

30

Şunları AppendDataBoundItems=truekolayca eklemek için kullanabilirsiniz :

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

1
VS, <br /> etiketini beğenmiyor ve benim için onsuz çalışıyor. Bu çok temiz bir seçenek, neden daha fazla oy almadığını bilmiyorum.
Tony L.

Büyüleyici gibi çalıştı. Tasarım zamanı çözümü için teşekkürler.
DataCat Robin

3
Selected = "true" olarak ayarlamayı unutmayın
Fandango68

24

Veri bağlama, boş liste öğenizi ekledikten sonra gerçekleşir ve zaten var olanın yerini alır, boş öğeyi denetleyicinizden Listenin başına eklemeniz veya veri bağladıktan sonra eklemeniz gerekir.

DÜZENLE:

ASP.Net 2.0'dan itibaren bu kadar hızlı bir şekilde googledikten sonra, veri bağlantılı öğeleri eklemek için ayarlayabileceğiniz bir "AppendDataBoundItems" gerçek özelliği vardır.

detaylar için bakınız

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

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


4
Dikkat etmeniz gereken bir şey, her geri göndermeden sonra aynı verileri tekrar tekrar ekleyerek açılır listenizin büyümesini sağlamaktır.
Keith Sirmons

Boş öğe orada değil mi yoksa orada ama seçilmemiş mi?
Çırpma

Bu, .aspx işaretlemenizde boş olanı ve ardından arkadaki koda bağlı olsaydınız işe yarar.
John Sheehan

13

Bence daha iyi bir yol, önce boş öğeyi eklemek, ardından verileri yaptığınız gibi bağlamaktır. Bununla birlikte AppendDataBoundItems, liste kontrolünün özelliğini ayarlamanız gerekir .

Herhangi bir veri kaynağını herhangi bir liste kontrolüne bağlamak için aşağıdaki yöntemi kullanıyoruz ...

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

"Çırpma" Said gibi, numara "AppendDataBoundItems" özelliğindedir

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

Teşekkürler "Çırpma"


5

Veri bağlamanızı yapın ve ardından aşağıdakileri ekleyin:

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

3

boş bir öğe ekliyormuşsunuz gibi görünür ve ardından veri bağlama, bu da listeyi boşaltır; veri bağlamadan sonra boş öğeyi eklemeyi deneyin


bunu yaptığımda altta boş satır beliriyor.
Saif Khan

Eklenecek dizini belirtebilirsiniz. JasonS'ın çözümüne bakın.
AndyG

@ [Saif Khan]: ve bu işe yaramazsa, boş satırı veri kaynağınıza ekleyin, ardından veritabanını bağlayın
Steven A. Lowe

3

basit

sonunda

ddlProducer.Items.Insert(0, "");

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

(Tamam test edildi)


0

Ayrıca, içeriğe sahip seçim ile boş seçim birleşimine sahip olabilirsiniz:

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

Geriye dönüp baktığımda, bu yöntemi yalnızca bir alternatif olarak önermem. Esneklik uğruna olayı seviyorum (OnDataBound = "mydropdown_DataBound"), ancak şu anki durumumda basitlik uğruna (AppendDataBoundItems = "true") kullanıyorum.
CINCHAPPS
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.