【问题标题】:Adding attribute to DropDownList in DataBound event?在 DataBound 事件中向 DropDownList 添加属性?
【发布时间】:2011-11-29 13:16:22
【问题描述】:

我有一个绑定到 DataTable 的下拉列表。

  ddlItems.DataSource = dt;
  ddlItems.DataBind();

在我的最终 html 中:

...
<option value="-1">aaa</option>
<option value="-2">bbb</option>
...

但我想在 DataBound 事件中捕获绑定事件并为每个 listItem 添加一个属性,以便最终 Html 为:

 ...
    <option value="-1" MyAttr="lalala1" >aaa</option>
    <option value="-2" MyAttr="lalala2" >bbb</option>
    ...

但是数据绑定事件的签名是:

  protected void ddlItemsDataBound(object sender, EventArgs e)

而e只有:

如何捕捉特定的有界 listItem ?

附言

我确实想取消数据绑定事件,并使用常规循环(在循环中添加 lisItems)

【问题讨论】:

  • “我不想......使用常规循环(在循环中添加 ListItems)”。恐怕你别无选择。但是将(不存在的)属性添加到 ListItems is bad practise。如果您能告诉我们您实际想要达到的目标,可能会有更好的方法。
  • 发件人是什么?你能把它转换成 ListItem 吗?
  • @MBen no ,,, its DropDownList
  • @RoyiNamir : 然后施放,得到 SelectedIndex
  • @MBen 这行不通,它同时绑定了所有 6 个列表项!....

标签: c# asp.net drop-down-menu


【解决方案1】:

DropDownList.DataBound 事件在为整个 DropDownList 调用 DropDownList.DataBind() 后触发。

DropDownList.Items 是一个没有事件的ListItemCollection

您将不得不再次手动循环遍历DropDownList.Items 集合,或者手动构建ListItemCollection 然后添加它。

注意:您可能不喜欢的另一种方法是扩展 DropDownList 和 ListItemCollection 并添加您想要的事件。

【讨论】:

    【解决方案2】:

    你想要的是类似于GridView.RowDataBound 的东西,它在 DropDownList 中不存在。您需要做的是DataBound 事件中的foreach 循环,或者您可以通过构建自己的自定义DropDownList 来添加此功能。后一种选择的唯一问题是 Microsoft 并不总是公开您需要覆盖的方法......所以我无法建议做您想做的事情有多容易或多难。

    【讨论】:

      猜你喜欢
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 2022-10-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 2017-11-22
      相关资源
      最近更新 更多