【发布时间】:2010-10-06 00:00:11
【问题描述】:
如何在 ASP.NET 中设置数据绑定下拉列表的初始值?
例如,我想要这些值,但要显示的第一个值应该是 -- Select One ---,并带有一个空值。
【问题讨论】:
标签: asp.net vb.net drop-down-menu
如何在 ASP.NET 中设置数据绑定下拉列表的初始值?
例如,我想要这些值,但要显示的第一个值应该是 -- Select One ---,并带有一个空值。
【问题讨论】:
标签: asp.net vb.net drop-down-menu
添加一个项目并将其“Selected”属性设置为 true,您可能还希望将“appenddatabounditems”属性设置为 true,以便在数据绑定时不会删除您的初始值。
如果您正在谈论设置数据绑定项目中的初始值,则挂钩到您的 ondatabound 事件并设置要选择的索引=true,您将希望将其包装在“如果不是 page.isPostBack 则 .. ..”虽然
Protected Sub DepartmentDropDownList_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles DepartmentDropDownList.DataBound
If Not Page.IsPostBack Then
DepartmentDropDownList.SelectedValue = "somevalue"
End If
End Sub
【讨论】:
我想你想做的是这样的:
<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true">
<asp:ListItem Text="--Select One--" Value="" />
</asp:DropDownList>
确保“AppendDataBoundItems”设置为true,否则绑定数据时将清除“--Select One--”列表项。
如果您将下拉列表的“AutoPostBack”属性设置为 true,您还必须将“CausesValidation”属性设置为 true,然后使用 ' RequiredFieldValidator”以确保“--Select One--”选项不会导致回发。
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1"></asp:RequiredFieldValidator>
【讨论】:
我所做的是在我数据绑定之后设置下拉列表的文本属性。像这样的:
protected void LoadPersonComboBox()
{
var p = new PeopleBLL();
rcmbboxEditPerson.DataSource = p.GetPeople();
rcmbboxEditPerson.DataBind();
rcmbboxEditPerson.Text = "Please select an existing person to edit...";
}
这会显示此下拉列表的初始可见值,但实际上不是下拉列表的一部分,也不是可选的。
【讨论】:
我知道这已经有一个选择的答案 - 但我想投入我的两分钱。 我有一个数据绑定下拉列表:
<asp:DropDownList
id="country"
runat="server"
CssClass="selectOne"
DataSourceID="country_code"
DataTextField="Name"
DataValueField="CountryCode_PK"
></asp:DropDownList>
<asp:SqlDataSource
id="country_code"
runat="server"
ConnectionString="<%$ ConnectionStrings:DBConnectionString %>"
SelectCommand="SELECT CountryCode_PK, CountryCode_PK + ' - ' + Name AS N'Name' FROM TBL_Country ORDER BY CountryCode_PK"
></asp:SqlDataSource>
在代码隐藏中,我有这个 - (默认选择美国):
if (this.IsPostBack)
{
//handle posted data
}
else
{
country.SelectedValue = "US";
}
页面最初基于 'US' 值加载,而不是试图担心 selectedIndex(如果将另一个项目添加到数据表中怎么办 - 我不想重新编码)
【讨论】:
我知道这已经过时了,但是结合这些想法可以得出一个非常优雅的解决方案:
保留 DropDownList 的所有默认属性设置(AppendDataBoundItems=false,Items 为空)。然后像这样处理 DataBound 事件:
protected void dropdown_DataBound(object sender, EventArgs e)
{
DropDownList list = sender as DropDownList;
if (list != null)
list.Items.Insert(0, "--Select One--");
}
锦上添花的是,这个处理程序可以由任意数量的 DropDownList 对象共享,甚至可以放入所有项目的通用实用程序库中。
【讨论】:
OnDataBound 事件。我认为这比接受的答案要好得多,因为当 DataSource 更改并且我们重新 DataBind 时没有问题;有了接受的答案,re-DataBinding 只会将元素添加到现有列表中(可能是您想要的,但似乎更有可能不是您想要的)。
要从下拉列表中选择一个值,请使用如下索引:
如果我们有
<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true"></asp:DropDownList>
你会使用:
DropDownList1.Items[DropDownList1.SelectedIndex].Value
这将返回所选索引的值。
【讨论】:
dropdownlist.Items.Insert(0, new Listitem("--Select One--", "0");
【讨论】:
你好朋友在这种情况下你可以使用
AppendDataBound="true"
然后使用列表项。 例如:
<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true">
<asp:ListItem Text="--Select One--" Value="" />
</asp:DropDownList>
但问题是在第二次选择数据后附加旧数据。
【讨论】: