Dropdownlist数据源并添加来自C#的额外项目
本文关键字:项目 数据源 添加 Dropdownlist | 更新日期: 2023-09-27 18:00:44
我有一个DropDownList
,它与aspx页面中的DataSource
关联。加载页面时,我需要再添加一个项目。
我的代码:
<asp:LabelDropDownList ID="ddlVisualTemplate" runat="server" LabelText="Visual Template:" DataSourceID="VisualTemplateDataSource" DataTextField="Name" DataValueField="Id" AutoPostBack="true" OnSelectedIndexChanged="ddlVisualTemplate_SelectedIndexChanged"/>
<asp:EntityDataSource ID="VisualTemplateDataSource" runat="server"
ConnectionString="name=Entities"
DefaultContainerName="Entities" EnableFlattening="False"
EntitySetName="tbEmailVisualTemplates">
我正在尝试添加一个额外的项目:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddlVisualTemplate.Items.Add(new ListItem("None", string.Empty));
}
}
如果我调试代码,它会遍历它。但当页面显示时,下拉列表中不包含"None"
。
对于原始海报来说可能为时已晚,但对于其他用户来说可能很有用:
您可以将值";无"选择值";,并通过设置AppendDataBoundItems="true"
来防止DataBind
重写它。这将使DataBind
附加而不是清除。
下面的例子来自Scott Guthrie在ASP.NET 2.0中发布的ListControl.AppendDataBoundItems属性。
<asp:DropDownList ID="DropDownList1" AppendDataBoundItems="true" runat="server" DataSourceID="SqlDataSource1" DataTextField="state" DataValueField="state">
<asp:ListItem Text="(Select a State)" Value="" />
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:pubsConnectionString %>"
SelectCommand="SELECT DISTINCT [state] FROM [authors]">
</asp:SqlDataSource>
这很可能是因为您在DataBind()
之前添加了项。如果您想添加带有的项目
ddlVisualTemplate.Items.Add()
则必须在绑定下拉列表之后执行。
如果你看http://msdn.microsoft.com/en-us/library/ms178472.aspx则在PreRenderComplete中执行DataBind。因此,您必须在PreRenderComplete之后发生的某个事件中添加元素。或者您可以在ddlVisualTemplate.DataBound
事件中执行此操作。
您可以通过语法设置数据源来轻松解决此问题:
ddlVisualTemplate.DataSource = VisualTemplateDataSource;
ddlVisualTemplate.DataBind();
ddlVisualTemplate.Items.Add(new ListItem("None", string.Empty));
顺便说一句,在我看来,这些数据源控件在asp.net中是错误的。我不喜欢定义数据源并控制到aspx页面的数据库连接的想法。为了更好地做到这一点,只需在谷歌上搜索每请求会话模式、关注点分离和n层应用程序。
更新:您可以直接调用数据,而不是"VisualTemplateDataSource"。我不知道EF,但它可能是这样的:"DataContext.tbEmailVisualTemplates"。你必须设置你的数据上下文。然后您就可以摆脱数据源控制。
使用此选项在0索引的绑定下拉列表中添加项目
ddlTicketType.Items.Insert(0, new ListItem("All", "0"));
这为我修复了它,但它将值放在了最后。
protected void ddlTest_PreRender(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddlTest.Items.Add(new ListItem("All", string.Empty));
}
}