这里有很好的答案,但我觉得有必要提供更多信息,因为有多种选择可行,我们需要决定使用哪一种。
首先,我们应该了解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();
}
}
注意:我喜欢检查 count 与检查的逻辑IsPostBack。虽然 PostBacks 通常是重复数据绑定的原因,但也有可能以其他方式导致它。检查项目计数基本上只是检查它是否已经加载。
或(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 -", ""));
}