2011-11-29 65 views
1

我有一个下拉列表,我绑定到DataTable。在DataBound事件中将属性添加到DropDownList?

ddlItems.DataSource = dt; 
    ddlItems.DataBind(); 
在最终的HTML

我:

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

但我想赶上绑定事件在数据绑定事件和一个属性添加到每个的listItem,从而使最终的HTML将是:

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

但数据绑定事件的signiture是:

protected void ddlItemsDataBound(object sender, EventArgs e) 

和e只有:

enter image description here

我如何能赶上具体界定的listItem?

p.s.

要取消的数据绑定事件,并使用正则环(在一个循环中添加lisItems)

+0

“我不想......使用常规循环(在循环中添加ListItems)”。恐怕你别无选择。但添加(不存在)的属性ListItems [是不好的做法](http://stackoverflow.com/questions/2744455/is-it-a-bad-practice-to-add-extra-attributes-to-html-元件)。如果你想告诉我们你实际想要达到的目标,可能会有更好的方法。 –

+0

发件人是什么?你可以将它转换为ListItem吗? – MBen

+0

@MBen no ,,,它的DropDownList –

回答

3

DropDownList.DataBound事件触发DropDownList.DataBind()被称为整个DropDownList后。

DropDownList.Items是没有事件的ListItemCollection

您必须再次手动循环访问DropDownList.Items集合,或者手动构建ListItemCollection然后添加它。

注意:您可能不会喜欢的替代方法是扩展DropDownList和ListItemCollection并添加所需的事件。

1

你想要的是类似于GridView.RowDataBound的东西,DropDownList不存在。你需要做的是在DataBound事件中的foreach循环,或者你可以通过构建自己的自定义DropDownList来添加此功能。后一种选择唯一的问题是,微软并不总是公开你需要重写的方法......所以我不能指出你想做什么是多么容易或很难。