Asp.net - Thêm mục trống ở đầu danh sách thả xuống


128

Tại sao danh sách thả xuống không hiển thị mục trống của tôi trước? Đây là những gì tôi có

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

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

Chỉnh sửa ~ Tôi liên kết với Danh sách Generig, đây có thể là thủ phạm không?


1
Điều này liên quan đến: stackoverflow.com/questions/983716/ Hãy
mcfea

Câu trả lời:


274

Sau cơ sở dữ liệu của bạn:

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

Thay phiên, bạn có thể khởi tạo ListItem, đặt thuộc tính được chọn của nó thành true và sau đó chèn nó vào drpList như trên.
skia.heliou

3
Điều này có thể giúp những người tìm kiếm câu trả lời hoạt động với dữ liệu sqlDataSource Trong trường hợp của tôi, tôi cũng phải thêm drpList.AppendDataBoundItems = true; để liên kết nó với dữ liệu hiện tại trong phương thức Page_Load
sabastienfyrre

29

Bạn có thể sử dụng AppendDataBoundItems=trueđể dễ dàng thêm:

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

1
VS không thích thẻ <br /> và nó hoạt động với tôi mà không có nó. Đây là một lựa chọn rõ ràng, tôi không biết tại sao nó không có nhiều phiếu bầu hơn.
Tony L.

Làm việc như người ở. Cảm ơn các giải pháp thời gian thiết kế.
DataCat Robin

3
Đừng quên đặt Đã chọn = "đúng"
Fandango68

24

Việc ghi dữ liệu diễn ra sau khi bạn đã thêm mục danh sách trống của mình và nó thay thế những gì đã có, bạn cần thêm mục trống vào đầu Danh sách từ bộ điều khiển của bạn hoặc thêm nó sau khi ghi dữ liệu.

BIÊN TẬP:

Sau khi kết nối nhanh chóng với ASP.Net 2.0, có một thuộc tính thực sự "AppendDataBoundItems" mà bạn có thể đặt thành ... nối các mục dữ liệu.

để biết chi tiết xem

http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=281 hoặc

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


4
Một suy nghĩ bạn cần coi chừng là có danh sách thả xuống của bạn tăng lên sau mỗi lần đăng lại bằng cách nối thêm dữ liệu lặp đi lặp lại.
Keith Sirmons

Là mục trống không có ở đó, hoặc ở đó nhưng chỉ không được chọn?
Whisk

Điều này sẽ hoạt động nếu bạn có một ô trống trong đánh dấu .aspx của bạn, sau đó bị ràng buộc trong mã phía sau.
John Sheehan

13

Tôi nghĩ rằng một cách tốt hơn là chèn mục trống trước, sau đó liên kết dữ liệu giống như bạn đang làm. Tuy nhiên, bạn cần đặt thuộc AppendDataBoundItemstính của điều khiển danh sách.

Chúng tôi sử dụng phương pháp sau để liên kết bất kỳ nguồn dữ liệu nào với bất kỳ điều khiển danh sách nào ...

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

Giống như "Whisk" đã nói, thủ thuật nằm trong thuộc tính "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;
    }
}

Cảm ơn "Râu"


5

Thực hiện cơ sở dữ liệu của bạn và sau đó thêm vào như sau:

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

3

có vẻ như bạn đang thêm một mục trống, và sau đó databinding, sẽ làm trống danh sách; hãy thử chèn mục trống sau khi ghi dữ liệu


Khi tôi làm điều đó, hàng trống xuất hiện ở phía dưới.
Saif Khan

Bạn có thể chỉ định chỉ mục để chèn vào. Nhìn vào giải pháp của JasonS.
AndyG

@ [Saif Khan]: và nếu điều đó không hoạt động, hãy chèn hàng trống vào nguồn dữ liệu của bạn, sau đó cơ sở dữ liệu
Steven A. Lowe

3

đơn giản

cuối cùng

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

(Đã kiểm tra OK)


0

Bạn cũng có thể có một liên kết chọn trống với lựa chọn có nội dung:

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

Nhìn lại, tôi sẽ không đề xuất phương pháp này trừ khi chỉ là phương án thay thế. Tôi thích sự kiện vì lợi ích linh hoạt (OnDataBound = "mydropdown_DataBound"), nhưng trong trường hợp hiện tại của tôi, tôi đang áp dụng (AppendDataBoundItems = "true") vì đơn giản.
CINCHAPPS 3/03/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.