65.9K
CodeProject 正在变化。 阅读更多。
Home

支持 optgroup 元素的下拉列表

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.33/5 (11投票s)

2008年3月24日

CPOL

4分钟阅读

viewsIcon

55315

downloadIcon

1193

自发布以来,ASP.NET 就缺乏对选项组的支持。我的目标是填补 .NET 框架中的这个空白。

引言

我最近注意到许多程序员在 .NET 框架的选择控件中缺少选项组功能。过了一段时间,我决定编写自己的控件,它的工作方式类似于 .NET 框架中可用的 System.Web.UI.DropDownList 控件。我的控件适用于 .NET framework 2.0 或更高版本。

背景,W3 推荐

在使用 DropDownGroupableList 控件时,请牢记 W3C 联盟定义的与选项组和选项项目相关的限制。请参阅 本文。一个优秀的网站程序员不仅仅取决于他程序代码的有效性 :-)

数据源类型

数据可以通过四种不同的方式提供

  • 内联项目的定义
  • 注意:这使您可以指定选项组以及选项项目。

  • 在代码中的 Items 集合中手动填充。
  • 注意:请注意 Items 集合公开的 AddItemAddGroup 方法。

  • 包含有效 IEnumerable 数据的 DataSource 属性。
  • DataSourceID 属性引用的控件提供的声明性数据源。

通过 DataSource 属性声明性或手动提供的数据,可以以常规方式或分层方式进行处理 - 阅读下一段。

分层数据源支持

如果提供的数据源实现了 IHierarchicalEnumerable,那么 DropDownGroupableList 的数据处理方式将略有不同。它是基于选项组和项目代表某种双层层次结构的理论。

您可以通过以下设置控制分层数据处理

  • IgnoreFirstBoundParent - 此设置指示列表控件忽略第一个绑定父项,而是绑定其子项。这意味着第一个父项是实际绑定数据的根。当绑定具有在站点导航中不起作用的单个根节点的站点地图时,此设置会很有帮助。默认值为 false
  • BindEmptyParentAsListItem - 此设置控制如何处理空父项。通常有两种方法可以处理空父项:创建一个没有子选项的选项组(这样它就无法被选中),或者创建一个可以选择的选项项目。默认值为 true
  • DataGroupTextField, DataGroupTextFormatString, 和 DataGroupIDField - 类似于 DropDownList 中为人熟知的属性,但指的是选项组属性。

通用属性

如果您熟悉 System.Web.UI.WebControls.DropDownList 控件(阅读本文您应该熟悉它),您可能知道它的功能和行为。这里列出了一些我的控件与标准 DropDownList 共同拥有的重要且常用的功能。

  • AppendDataBoundItems - 指定在绑定数据之前是否清除 Items 集合的值。
  • AutoPostBack - 更改选定项目后将表单发送回服务器。
  • CausesValidation, ValidationGroup - 这些属性协同工作以确保控件的有效性。
  • DataTextField, DataValueField - 分别包含 Text 属性值或 Value 属性值的绑定对象属性的名称。
  • SelectedItemChanged - 当选定项目更改时发生;请注意,此事件与选项组无关,因为选项组无法被选中。

与标准 DropDownList 的区别

SelectedValue

当您将 SelectedValue 属性的值设置为对应于多个项目的某个值时(例如,您插入了多个具有相同值的项目),将会抛出异常。

ListItem.Enabled

System.Web.UI.WebControls.ListItem 类的 Enabled 属性会影响它在页面上的可见性。我决定改变这种行为,因此将此值设置为 false 会通过 disabled HTML 属性将其禁用,但它仍然会被渲染。

Items 集合

此集合定义与抽象的 OptionItemBase 类配合使用,该类由 OptionListItemOptionGroupItem 类实现。这使得我的列表控件可以在顶层包含选项项目和选项组。OptionGroupItem 类之后只能包含 OptionListItem 类实例,不允许嵌套内部组,因为它不是 W3 推荐的一部分。

示例

所附 zip 文件包含以下示例页面

  • DynamicDataSource.aspx - 演示从代码隐藏动态填充。
  • InlineDataDefinition.aspx - 演示内联 Items 定义。
  • HierarchicalDataSource.aspx - 显示分层数据源功能的强大之处。

结论

创建和调试此组件花费了我不少时间,所以我希望它能对所有 ASP.NET 程序员有所帮助。欢迎随意使用 :-)

© . All rights reserved.