为什么我的DropDownList不会填充Page_Load事件中的项目?
我有这样的控制来获取一些数据:为什么我的DropDownList不会填充Page_Load事件中的项目?
<asp:DropDownList ID="newsOrEvent" runat="server" Text='<%# Eval("newsEvent") %>'></asp:DropDownList>
然后在我的Page_Load我有:
protected void Page_Load(object sender, EventArgs e)
{
newsOrEvent.Items.clear();
newsOrEvent.Items.Add("News");
newsOrEvent.Items.Add("Event");
if (!this.IsPostBack)
{
if(newsID != 0)
{
this.BindRepeater();
// this.BindImageRepeater();
}
}
}
我的编译器说:“newsOrEvent”这个名字不会在目前情况下
存在private void BindRepeater()
{
using (SqlConnection con = new SqlConnection(constr))
{
string myQuery = string.Format("SELECT * FROM tblNewsEvents WHERE newsID = {0}", newsID);
using (SqlCommand cmd = new SqlCommand(myQuery, con))
{
using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
sda.Fill(dt);
news.DataSource = dt;
news.DataBind();
}
}
}
}
这SO文章here建议:
- 我应该
.clear
项目第一 - 输入
<%# Eval("newsEvent") %>
本身,以查看它是否加载在页面,它会。
它还说:
如果下拉控件Text属性与指定数据源之前,任何价值分配,会出现此错误。
如何在读取Eval之前先添加项目?
我看不出为什么DropDownList
没有填充。
正如我在评论中提到asp:DropDownList
控制不具有Text
属性。获取您的下拉列表最简单的方法是填写声明。像这样的东西。
<asp:DropDownList ID="ddNewsOrEvents" runat="server" DataTextField="NewsTitle"
DataValueField="newsID"
AppendDataBoundItems="true" DataSourceID="sqlNews">
<asp:ListItem Value="-1" Text="News"></asp:ListItem>
<asp:ListItem Value="0" Text="Event"></asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="sqlNews" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionFromWebConfig %>"
SelectCommand="select newsID, newsTitle from dbo.tblNewsEvents where [email protected]">
<SelectParameters>
<%--if newsID comes from some control --%>
<asp:ControlParameter ControlID="someControl" PropertyName="someProperty" Name="newsID" Type="Int32" />
<%--if newsId comes from querystring --%>
<asp:QueryStringParameter QueryStringField="newsid" Name="newsID" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
没有后面的代码需要。只要遵循KISS原则(ķ EEP 我吨小号 imple 小号 tupid)
跟进SelectedValue
(Text
)DropdownList
控制的属性只能控制后设置为DataBound
。这意味着您只能在装订容器中设置SelectedValue='<%#Eval("dataField")%>'
,并且DropDownList
本身具有DataSourceID
。否则你必须在DataBound
事件后设置.SelectedValue
。
是的,它确实有[Text](https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.dropdownlist(v = vs.110).aspx),因为它继承了'ListControl' 。 – CodingYoshi
对不起,'Text'属性确实存在(继承),下拉与'SelectedValue'相同。 –
显示页面加载方法。也许只是干净和重建,甚至重新启动,特别是如果您添加另一个服务器控件,并且无法从代码后面的代码访问该控件。 – Crowcoder
@Crowcoder张贴 - 在重新开始? – davvv
不要重新启动您的计算机以清除IIS Express。 – Crowcoder