這裏還有很好的答案,但我覺得有必要包括更多的信息,因爲有多個選項,工作,我們需要決定使用哪個。
首先,我們應該瞭解AppendDataBoundItems
。如果AppendDataBoundItems = "true"
,ListItems
被添加到DropDownList
而不清除舊的。否則,DropDownList
在下一個DataBind
之前被清除。 MSDN AppendDataBoundItems doc
基本上有大多數的答案涉及2種選擇:
1.定義HTML中的空白選項,並從數據庫中添加listItems中DropDownList的只有一次。
注意三件事情在這裏:
- 空白
ListItem
在HTML中定義
AppendDataBoundItems="true"
DataBind
不叫上回發或當DropDownList
項目 計數> 1
來源:
<asp:DropDownList ID="MyList" runat="server" AppendDataBoundItems="true" DataValueField="Id" DataTextField="Name" >
<asp:ListItem Text="- Select One -" Value="" />
</asp:DropDownList>
後面的代碼:
protected void Page_Load(object sender, System.EventArgs e)
{
if (MyList.Items.Count <= 1) {
MyList.DataSource = MyDataSource;
MyList.DataBind();
}
}
注:我喜歡檢查計數VS檢查IsPostBack
的邏輯。雖然PostBacks通常是重複數據綁定的原因,但可以通過其他方式進行。檢查項目計數基本上只是檢查它是否已被加載。
OR(選項可使用IsPostBack
代替)
protected void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack) {
MyList.DataSource = MyDataSource;
MyList.DataBind();
}
}
2.清除並重新加載每個頁面刷新DropDownList的。從第一個選項
通告3差異:
AppendDataBoundItems="false"
(如果它不然後將它定義false
是它的 默認值)
- 空白
ListItem
在碼被加到後面。我們無法在html 中定義它,因爲使用AppendDataBoundItems="false"
時,它將被清除。
DataBind
被稱爲每Page_Load
來源:
<asp:DropDownList ID="MyList" runat="server" DataValueField="Id" DataTextField="Name"
OnDataBound="MyList_DataBound" >
</asp:DropDownList>
後面的代碼:
protected void Page_Load(object sender, System.EventArgs e)
{
MyList.DataSource = MyDataSource;
MyList.DataBind();
}
protected void MyList_DataBound(object sender, EventArgs e)
{
MyList.Items.Insert(0, new ListItem("- Select One -", ""));
}
謝謝.. !!它幫助 – msbyuva 2010-08-10 17:36:52
Thnx!像魅力一樣工作 – matskn 2012-08-10 10:52:53