Asp.net - Tambahkan item kosong di atas dropdownlist


128

Mengapa dropdown tidak menunjukkan item kosong saya terlebih dahulu? Inilah yang saya miliki

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

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

Sunting ~ Saya terikat ke Daftar Generig, mungkinkah ini pelakunya?


Jawaban:


275

Setelah databind Anda:

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

Sebagai alternatif, Anda dapat membuat Instantiate ListItem, atur properti yang Dipilih menjadi true, dan kemudian masukkan ke drpList seperti di atas.
skia.heliou

3
Ini dapat membantu mereka yang mencari jawaban untuk bekerja dengan data sqlDataSource Dalam kasus saya, saya juga harus menambahkan drpList.AppendDataBoundItems = true; untuk mengikatnya ke data saat ini dalam metode Page_Load
sabastienfyrre

30

Anda dapat menggunakannya AppendDataBoundItems=trueuntuk menambahkan:

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

1
VS tidak suka tag <br /> dan berfungsi untuk saya tanpanya. Ini adalah opsi yang bersih, saya tidak tahu mengapa tidak memiliki lebih banyak suara.
Tony L.

Bekerja seperti pesona. Terima kasih atas solusi waktu desainnya.
DataCat Robin

3
Jangan lupa untuk mengatur Selected = "true"
Fandango68

24

Penyatuan data terjadi setelah Anda menambahkan item daftar kosong Anda, dan itu menggantikan apa yang sudah ada, Anda perlu menambahkan item kosong ke awal Daftar dari controller Anda, atau menambahkannya setelah penyatuan data.

EDIT:

Setelah googling ini dengan cepat pada ASP.Net 2.0 ada properti benar "AppendDataBoundItems" yang dapat Anda atur untuk ... menambahkan item databound.

untuk detail lihat

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

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


4
Satu pemikiran yang perlu Anda perhatikan adalah daftar dropdown Anda tumbuh setelah setiap postback dengan menambahkan data yang sama berulang-ulang.
Keith Sirmons

Apakah item kosong tidak ada, atau ada tetapi tidak dipilih?
Whisk

Ini akan berhasil jika Anda memiliki yang kosong di markup .aspx Anda, kemudian terikat kode di belakang.
John Sheehan

13

Saya pikir cara yang lebih baik adalah memasukkan item kosong terlebih dahulu, kemudian ikat data seperti yang telah Anda lakukan. Namun Anda perlu mengatur AppendDataBoundItemsproperti dari kontrol daftar.

Kami menggunakan metode berikut untuk mengikat sumber data apa pun ke kontrol daftar ...

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

Seperti "Whisk" Said, triknya ada di properti "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;
    }
}

Terima kasih "mengocok"


5

Lakukan penyatuan data Anda lalu tambahkan yang berikut:

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

3

sepertinya Anda menambahkan item kosong, dan kemudian penyatuan data, yang akan mengosongkan daftar; coba masukkan item kosong setelah penyatuan data


ketika saya melakukan itu, baris kosong muncul di bagian bawah.
Saif Khan

Anda dapat menentukan indeks yang akan dimasukkan. Lihatlah solusi JasonS.
AndyG

@ [Saif Khan]: dan jika itu tidak berhasil, masukkan baris kosong ke sumber data Anda, lalu databind
Steven A. Lowe

3

sederhana

akhirnya

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

1

ddlCategory.DataSource = ds;
ddlCategory.DataTextField = "CatName";
ddlCategory.DataValueField = "CatID";

Cak 1:

ddlCategory.Items.Add(new ListItem("--please select--", "-1"));
ddlCategory.AppendDataBoundItems = true;
ddlCategory.SelectedIndex = -1;

ddlCategory.DataBind();

Cak 2:

ddlCategory.Items.Insert(0, new ListItem("-- please select --", "0"));

(Diuji OK)


0

Anda juga bisa memiliki penyatuan pilihan kosong dengan pilih yang memiliki konten:

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

Melihat ke belakang, saya tidak akan merekomendasikan metode ini kecuali hanya sebagai alternatif. Saya suka acara ini demi fleksibilitas (OnDataBound = "mydropdown_DataBound"), tetapi dalam kasus saya saat ini, saya mengadopsi (AppendDataBoundItems = "true") untuk kesederhanaan.
CINCHAPPS
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.