Asp.net - เพิ่มรายการว่างที่ด้านบนของรายการแบบเลื่อนลง


128

ทำไมดร็อปดาวน์ไม่แสดงรายการว่างของฉันก่อน นี่คือสิ่งที่ฉันมี

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

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

แก้ไข ~ ฉันผูกพันกับรายการ Generig นี่อาจเป็นผู้ร้ายหรือไม่


1
สิ่งนี้เกี่ยวข้องกับ: stackoverflow.com/questions/983716/…
mcfea

คำตอบ:


274

หลังจากที่ฐานข้อมูลของคุณ:

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

อีกวิธีหนึ่งคุณสามารถยกตัวอย่างเป็น ListItem ตั้งค่าคุณสมบัติที่เลือกเป็นจริงจากนั้นแทรกลงใน drpList ดังกล่าวข้างต้น
skia.heliou

3
นี่อาจช่วยให้ผู้ที่ต้องการคำตอบในการทำงานกับข้อมูล sqlDataSource ในกรณีของฉันฉันต้องเพิ่ม drpList.AppendDataBoundItems = true ผูกมันกับข้อมูลปัจจุบันในวิธี Page_Load
sabastienfyrre

29

คุณสามารถใช้AppendDataBoundItems=trueเพื่อเพิ่ม:

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

1
VS ไม่ชอบแท็ก <br /> และใช้งานได้โดยที่ไม่มีแท็ก นี่เป็นตัวเลือกที่ดีฉันไม่รู้ว่าทำไมมันถึงไม่มีคะแนนมากกว่า
Tony L.

ทำงานเหมือนจับใจ ขอบคุณสำหรับการแก้ปัญหาเวลาออกแบบ
DataCat Robin

3
อย่าลืมตั้งค่า Selected = "true"
Fandango68

24

databinding เกิดขึ้นหลังจากที่คุณเพิ่มรายการว่างเปล่าและแทนที่สิ่งที่มีอยู่แล้วคุณต้องเพิ่มรายการเปล่าไปยังจุดเริ่มต้นของรายการจากตัวควบคุมของคุณหรือเพิ่มหลังจาก databinding

แก้ไข:

หลังจาก googling สิ่งนี้อย่างรวดเร็วในฐานะของ ASP.Net 2.0 มีคุณสมบัติจริง "AppendDataBoundItems" ที่คุณสามารถตั้งค่าเป็น ... ผนวกรายการฐานข้อมูล

สำหรับรายละเอียดดู

http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=281หรือ

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


4
หนึ่งคิดว่าคุณต้องระวังคือการมีรายการแบบเลื่อนลงของคุณเติบโตหลังจากแต่ละ postback โดยผนวกข้อมูลเดียวกันซ้ำแล้วซ้ำอีก
Keith Sirmons

รายการว่างเปล่าไม่มีอยู่ที่นั่นหรือไม่ได้เลือกเพียงอย่างเดียวหรือ
พา

วิธีนี้จะได้ผลถ้าคุณมีไฟล์เปล่าในมาร์กอัป. aspx ของคุณจากนั้นผูกโค้ดไว้ด้านหลัง
John Sheehan

13

ฉันคิดว่าวิธีที่ดีกว่าคือการแทรกรายการว่างก่อนจากนั้นผูกข้อมูลเช่นเดียวกับที่คุณทำ อย่างไรก็ตามคุณต้องตั้งค่าAppendDataBoundItemsคุณสมบัติของตัวควบคุมรายการ

เราใช้วิธีการต่อไปนี้เพื่อผูกแหล่งข้อมูลใด ๆ กับตัวควบคุมรายการ ...

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

เช่นเดียวกับ "Whisk" กล่าวว่าเคล็ดลับอยู่ในคุณสมบัติ "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;
    }
}

ขอบคุณ "Whisk"


5

ทำฐานข้อมูลของคุณแล้วเพิ่มรายการต่อไปนี้:

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

3

ดูเหมือนว่าคุณกำลังเพิ่มรายการว่างเปล่าและจากนั้น databinding ซึ่งจะทำให้รายการว่างเปล่า ลองแทรกรายการเปล่าหลังจาก databinding


เมื่อฉันทำเช่นนั้นแถวว่างจะปรากฏขึ้นที่ด้านล่าง
Saif Khan

คุณสามารถระบุดัชนีที่จะแทรกเข้าไป ดูโซลูชันของ JasonS
AndyG

@ [Saif Khan]: และหากยังไม่ได้ผลให้แทรกแถวว่างลงในแหล่งข้อมูลของคุณจากนั้น databind
Steven A. Lowe


1

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

ส่วนที่ 1:

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

ddlCategory.DataBind();

บัญชี 2:

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

(ทดสอบแล้วตกลง)


0

คุณสามารถมีสหภาพของการเลือกว่างด้วยการเลือกที่มีเนื้อหา:

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

มองย้อนกลับไปฉันจะไม่แนะนำวิธีนี้ยกเว้นทางเลือกเท่านั้น ฉันชอบกิจกรรมเพื่อความยืดหยุ่น (OnDataBound = "mydropdown_DataBound") แต่ในกรณีปัจจุบันของฉันฉันกำลังใช้ (AppendDataBoundItems = "true") เพื่อเห็นแก่ความเรียบง่าย
CINCHAPPS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.