Здесь есть хорошие ответы, но я почувствовал необходимость включить больше информации, потому что есть несколько вариантов, которые работают, и нам нужно решить, какой из них использовать.
Во-первых, мы должны понять AppendDataBoundItems. Если AppendDataBoundItems = "true", ListItems добавляются к DropDownList без удаления старых. В противном случае DropDownList очищается перед следующим DataBind. MSDN AppendDataBoundItems документ
В основном есть 2 варианта ответов:
1. Определите пустой вариант в html и добавьте ListItems из базы данных в DropDownList только один раз.
Обратите внимание на 3 вещи:
- Пустой
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();
}
}
Примечание: мне нравится логика проверки счетчика и проверки IsPostBack. Хотя PostBack часто является причиной дублирования привязки данных, это можно вызвать другими способами. Проверка количества элементов - это просто проверка, загружен ли он уже.
ИЛИ (вместо этого можно использовать 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 -", ""));
}
person
Tony L.
schedule
21.07.2015