【问题标题】:DropDownList: DataTextField, DataValueField... DataEnabledField?DropDownList:DataTextField,DataValueField... DataEnabledField?
【发布时间】:2011-02-26 06:24:48
【问题描述】:

我目前正在使用从 DropDownList 继承的控件(它有一些与这个问题并不真正相关的额外功能,但它为我提供了一个实现我要讨论的额外内容的好地方) .

我们正在使用数据绑定,DataTextField 和 DataValueField 工作得非常好。但是,我发现自己需要一个类似的字段来控制是否启用该项目。 (我已经重写了控件的 RenderContents 方法,因此它可以正确呈现未启用的项目,因为 DropDownList 默认情况下不这样做。)

因此,我想知道如何覆盖 DropDownList 的数据绑定,使其行为完全正常,除了每个 DataSource 项的另一个字段应用于每个 ListItem 的 Enabled 属性。

(注意:我将绑定到的字段不是直接布尔值,并且没有显式/隐式转换为布尔值,因此我可能会将其作为字符串“传递”。)

【问题讨论】:

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


    【解决方案1】:

    DropDownList 控件的绑定逻辑实际上是在其基类ListControl 中实现的。您需要重写的方法是 PerformDataBinding(IEnumerable)

    您可以查看 Reflector 中的默认实现以确保您不会遗漏某些内容,但它是受保护的虚拟的,因此您应该不会有任何问题。只需调用 base 然后添加您需要的逻辑。

    【讨论】:

    • 感谢您为我指明正确的方向;我现在已经完成了我想做的事情:) 在调用 base 之后,我假设列表的 Items 与 dataSource IEnumerable 的顺序相同,但这似乎可行。
    • 嘿,在检查了 Reflector 之后,我发现我什至不需要覆盖 RenderContents,因为它确实关注 Enabled 字段 - 我之前测试时一定搞砸了.
    猜你喜欢
    • 2020-03-28
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多