asp.net - 將ListItems從通用列表添加到DropDownList




drop-down-menu (3)

我有一個這aspx-code:(樣本)

<asp:DropDownList runat="server" ID="ddList1"></asp:DropDownList>   

有了這個代碼隱藏:

List<System.Web.UI.WebControls.ListItem> colors = new List<System.Web.UI.WebControls.ListItem>();
colors.Add(new ListItem("Select Value", "0"));
colors.Add(new ListItem("Red", "1"));
colors.Add(new ListItem("Green", "2"));
colors.Add(new ListItem("Blue", "3"));
ddList1.DataSource = colors;
ddList1.DataBind();

輸出如下所示:

<select name="ddList1" id="ddList1">
    <option value="Select Value">Select Value</option>
    <option value="Red">Red</option>
    <option value="Green">Green</option>
    <option value="Blue">Blue</option>
</select>   

我的問題是:為什麼我的值(數字)消失,文本用作值和文本? 我知道,如果我使用ddList1.Items.Add(New ListItem("text", "value"))方法,但我需要使用通用列表作為其他原因的數據源。


如果您正在構建ListItems,則無需首先使用DataBind()。

只需將它們添加到您的DropDownList:



ddList1.Items.Add(new ListItem("Select Value", "0"));
ddList1.Items.Add(new ListItem("Red", "1"));
ddList1.Items.Add(new ListItem("Green", "2"));
ddList1.Items.Add(new ListItem("Blue", "3"));

通過設置DataTextField和DataValueField(如buyutec寫的),DataBind()在您已經擁有可以用作DataSource的集合/數據對象(通常是DataTable或DataView)時非常有用。


由於DataBind方法僅在設置了DataValueField屬性的情況下綁定值。 如果在調用DataBind之前將DataValueField屬性設置為“Value”,則值將出現在標記上。

更新:您還需要將DataTextField屬性設置為“文本”。 這是因為數據綁定和手動添加項目不能以相同的方式工作。 數據綁定不知道類型ListItem的存在,並通過評估數據源中的項目來生成標記。


“如果您正在構建ListItems,則無需首先使用DataBind()。”

直接添加到下拉列表是簡單的方法(並給出示例代碼是正確的),但可以說你有一個無序的數據源,你想列表項目排序。

實現這一目的的一種方法是創建ListItem的通用列表,然後在數據綁定到列表之前使用繼承的排序方法。

皮膚上有很多的貓





listitem