我有一个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"
。
答案 0 :(得分:12)
原始海报可能为时已晚,但对其他用户可能有用:
您可以在设计器(或代码)中添加值“无”,“选择值”等,并通过设置DataBind
来阻止AppendDataBoundItems="true"
覆盖它。这将使DataBind
追加而不是明确。
有关示例,请参阅Scott Guthrie的帖子ListControl.AppendDataBoundItems Property in ASP.NET 2.0。
答案 1 :(得分:10)
这很可能是因为您在DataBind()
之前添加了该项目。如果要添加带
ddlVisualTemplate.Items.Add()
然后你必须在之后>>绑定下拉列表。
如果查看http://msdn.microsoft.com/en-us/library/ms178472.aspx,那么DataBind正在PreRenderComplete中完成。因此,您必须在PreRenderComplete之后发生的某些事件中添加元素。
或者您可以在ddlVisualTemplate.DataBound
事件中执行此操作。
答案 2 :(得分:6)
您可以通过以编程方式设置数据源来轻松解决此问题:
ddlVisualTemplate.DataSource = VisualTemplateDataSource;
ddlVisualTemplate.DataBind();
ddlVisualTemplate.Items.Add(new ListItem("None", string.Empty));
顺便说一下,在我看来,这些数据源控件在asp.net中是错误的。我不喜欢定义数据源并控制到aspx页面的数据库连接的想法。有关更好的方法,只需谷歌关于每个请求模式的会话,关注点分离和n层应用程序。
更新:您可以直接调用数据而不是“VisualTemplateDataSource”。我不知道EF,但它可能是这样的:“DataContext.tbEmailVisualTemplates”。您必须设置datacontext。然后你可以摆脱数据源控制。
答案 3 :(得分:1)
使用此选项在0索引
的绑定下拉列表中添加项目ddlTicketType.Items.Insert(0, new ListItem("All", "0"));
答案 4 :(得分:0)
这对我来说是固定的,但它最终会把价值放在一边。
protected void ddlTest_PreRender(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddlTest.Items.Add(new ListItem("All", string.Empty));
}
}