我正在尝试在转发器中填充下拉列表,但我不是很成功。 我可能使用了错误的 EventArgs e 。
这是我的aspx代码:
<asp:Repeater runat="server" id="criteriaScore">
<HeaderTemplate>
<ul>
<li class="header"><span class="item">Kriterie</span><span class="value">Poeng</span><span class="description">Beskrivelse</span></li>
</HeaderTemplate>
<ItemTemplate>
<li>
<span class="item"> <%# Eval("criteria") %>:</span>
<asp:DropDownList id="ddlRating" runat="server" autopostback="true" enableviewstate="false"></asp:DropDownList>
<span class="value score<%# Eval("lvl") %>" title="<%# Eval("description") %>"> </span>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
背后的代码:
protected void criteriaScore_ItemDataBound(object sender, DataListCommandEventArgs e)
{
DropDownList ddl = (DropDownList)e.Item.FindControl("ddlRating");
for(int i=1; i > 5; i++)
{
ddl.Items.Add(new ListItem(i.ToString(), i.ToString()));
}
}
有人可以指导我走正确的道路吗? :)
答案 0 :(得分:21)
在这个问题上展开其他答案,不应该使用ItemDataBound事件绑定控制数据,在控制级别执行此操作。
在您的下拉列表中定义数据绑定事件:
<asp:DropDownList runat="server" ID="ddlYourDDL" OnDataBinding="ddlYourDDL_DataBinding">
然后实现OnDataBinding事件:
protected void ddlYourDDL_DataBinding(object sender, System.EventArgs e)
{
DropDownList ddl = (DropDownList)(sender);
for (int i = 1; i < 5; i++)
{
ddl.Items.Add(new ListItem(i.ToString(), i.ToString()));
}
// Now that the items are all there, set the selected property
ddl.SelectedValue = Eval("selectedfieldname").ToString();
}
您应该尝试在控件级别执行所有数据绑定,而不是搜索内容并让您的网格必须知道它包含的内容。每个控件都可以自行处理;)通过这种方式,可以更轻松地为模板添加和删除控件,并将这些更改保持隔离状态。
答案 1 :(得分:6)
for(int i=1;i > 5;i++)
应该阅读......
for(int i=1;i < 5 ;i++)
答案 2 :(得分:1)
在.aspx页面中:
<asp:Repeater runat="server" id="criteriaScore"
OnItemDataBound="criteriaScore_ItemDataBound">
代码背后:
protected void criteriaScore_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
// This event is raised for the header, the footer, separators, and items.
// Execute the following logic for Items and Alternating Items.
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
ListItemType.AlternatingItem)
{
DropDownList ddl = (DropDownList)e.Item.FindControl("ddlRating");
for(int i=0; i < 5; i++)
{
ddl.Items.Add(new ListItem(i.ToString(), i.ToString()));
}
}
}
答案 3 :(得分:0)
private void criteriaScore_ItemDataBound(object source,RepeaterCommandEventArgs e)
答案 4 :(得分:0)
无论方法如何实现(有几种方法),ItemDataBound事件都不会附加到标记中的转发器。
答案 5 :(得分:0)
变化: for(int i = 1; i> 5; i ++) 至: for(int i = 1; i&lt; 5; i ++)
或者:
using System.Linq;
ddl.DataSource = Enumerable.Range(1, 5);
ddl.DataBind();
ddl.SelectedValue = yourValue