技术开发 频道

绑定Enum到ASP.NET数据绑定控件

IT168技术文档】

    本文向读者介绍NBear中实现的DropDownListField字段绑定控件和EnumDescriptionAttribute特性。结合使用这两个组件,就可以最简单、易用和可扩展地完美解决绑定Enum到ASP.NET数据绑定控件的问题。增加支持第三方枚举描述,支持二进制与过的枚举值。

    从DropDownListField的名称,大家一定猜到了,是的,DropDownListField控件和ASP.NET内置的BoundField,CheckBoxField等一样,可以直接用于GridView,DetailsView等控件的声明中,用于描述一个Enum类型的字段的绑定。使用DropDownListField,我们就再也不需要向原来一样为了绑定一个Enum类型的值而使用自定义ItemTemplate并嵌入DropDownList,并写额外代码来填充ItemTemplate中的DropDownList了。

    首先,我们看看如何在我们的页面代码中使用DropDownListField控件:

<%@ Page Language="C#" %> <%@ Register TagPrefix="nb" Namespace="NBear.Web.Data" Assembly="NBear.Web.Data" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>NBear DataSource Test</title> </head> <body> <form id="aspnetForm" runat="server"> <nb:NBearDataSource ID="TestDS" runat="server" ConnectionStringName="test access db" TypeName="Entities.SimpleData" FilterExpression="{SimpleID} > 0" DefaultOrderByExpression="{SimpleID} DESC, {SimpleName}" /> <asp:GridView ID="TestGrid" runat="server" DataSourceID="TestDS" AllowSorting="True" AllowPaging="True" PageSize="3" AutoGenerateEditButton="True" AutoGenerateDeleteButton="True" DataKeyNames="SimpleId" AutoGenerateColumns="False" > <Columns> <asp:BoundField DataField="SimpleId" HeaderText="SimpleId" SortExpression="SimpleId" /> <asp:BoundField DataField="SimpleName" HeaderText="SimpleName" SortExpression="SimpleName" /> <asp:CheckBoxField DataField="BoolVal" HeaderText="BoolVal" SortExpression="BoolVal" Text="BoolVal" /> <nb:DropDownListField DataField="Status" HeaderText="Status" SortExpression="Status" EnumType="EntityDesigns.SimpleStatus" /> </Columns> </asp:GridView> <br /> <asp:DetailsView ID="TestDetail" runat="server" DataSourceID="TestDS" DefaultMode="Insert" AutoGenerateInsertButton="True" AutoGenerateRows="False"> <Fields><asp:BoundField DataField="SimpleName" HeaderText="Name" /> <asp:CheckBoxField DataField="BoolVal" HeaderText="BoolVal" /> <nb:DropDownListField DataField="Status" HeaderText="Status" EnumType="EntityDesigns.SimpleStatus" /> </Fields> </asp:DetailsView> </form> </body> </html>

    请注意第2和第19,27行。在页面中,首先要注册NBear.Web.Data命名空间。接着,在数据控件的Columns中,添加DropDownListField就行了,和ASP.NET内置的的CheckBoxField使用中的唯一区别是,DropDownListField必须额外设置一个EnumType属性,顾名思义,就是绑定到这个控件Enum字段的类型的FullName。 

    OK,就是这么简单。本页面中使用到的SimpleStatus如下:

public enum SimpleStatus { Value1 = 1, Value2 = 2 }

    如果运行这个页面,您将可以看到DropDownList中显示的是Value1和Value2。

    等1秒钟,你一定要说,这还不是我想要的,因为,我需要枚举值在DropDownList中显示的文字描述是我需要的自定义信息。 

0
相关文章