在Repeater中填充DropDownList不起作用

我正在尝试在转发器中填充下拉列表,但我不是很成功。 我可能使用错误的EventArgs e

这是我的aspx代码:

  
  • KriteriePoengBeskrivelse
  • : <span class="value score" title="">

而背后的代码:

  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())); } } 

有人可以指导我走正确的道路吗? 🙂

在这个问题上展开其他答案,不应该使用ItemDataBound事件绑定控制数据,在控制级别执行此操作。

在您的下拉列表中定义数据绑定事件:

  

然后实现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(); } 

您应该尝试在控件级别执行所有数据绑定,而不是搜索事物并让网格必须知道它包含的内容。 每个控件都可以自行处理;)通过这种方式,可以更轻松地向模板添加和删除控件,并将这些更改保持隔离状态。

 for(int i=1;i > 5;i++) 

应该读 …

 for(int i=1;i < 5 ;i++) 

在.aspx页面中:

  

在Code-Behind中:

 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())); } } } 

private void criteriaScore_ItemDataBound(object source,RepeaterCommandEventArgs e)

无论方法如何实现(有几种方法),ItemDataBound事件都不会附加到标记中的转发器。

更改:for(int i = 1; i> 5; i ++)To:for(int i = 1; i <5; i ++)

要么:

  using System.Linq; ddl.DataSource = Enumerable.Range(1, 5); ddl.DataBind(); ddl.SelectedValue = yourValue