程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 綁定Enum到ASP.NET數據綁定控件的完美解決方案

綁定Enum到ASP.NET數據綁定控件的完美解決方案

編輯:關於ASP.NET

本文向讀者介紹NBear中實現的DropDownListField字段綁定控件和EnumDescriptionAttribute特性。結合使用這兩個組件,就可以最簡單、易用和可擴展地完美解決綁定Enum到ASP.NET數據綁定控件的問題。[05/26修訂]——增加支持第三方枚舉描述,支持二進制與過的枚舉值。

從DropDownListField的名稱,大家一定猜到了,是的,DropDownListField控件和ASP.NET內置的BoundField,CheckBoxField等一樣,可以直接用於GridView,DetailsView等控件的聲明中,用於描述一個Enum類型的字段的綁定。使用DropDownListField,我們就再也不需要向原來一樣為了綁定一個Enum類型的值而使用自定義ItemTemplate並嵌入DropDownList,並寫額外代碼來填充ItemTemplate中的DropDownList了。

首先,我們看看如何在我們的頁面代碼中使用DropDownListField控件:

1<%@ Page Language="C#" %>
2<%@ Register TagPrefix="nb" Namespace="NBear.Web.Data" Assembly="NBear.Web.Data" %>
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml" >
5<head runat="server">
6  <title>NBear DataSource Test</title>
7</head>
8<body>
9<form id="aspnetForm" runat="server">
10  <nb:NBearDataSource ID="TestDS" runat="server" ConnectionStringName="test access db"
11    TypeName="Entities.SimpleData" FilterExpression="{SimpleID} > 0" DefaultOrderByExpression="{SimpleID} DESC, {SimpleName}" />
12  <asp:GridView ID="TestGrid" runat="server" DataSourceID="TestDS" AllowSorting="True" AllowPaging="True"
13    PageSize="3" AutoGenerateEditButton="True" AutoGenerateDeleteButton="True" DataKeyNames="SimpleId" AutoGenerateColumns="False" >
14    <Columns>
15      <asp:BoundField DataField="SimpleId" HeaderText="SimpleId" SortExpression="SimpleId" />
16      <asp:BoundField DataField="SimpleName" HeaderText="SimpleName" SortExpression="SimpleName" />
17      <asp:CheckBoxField DataField="BoolVal" HeaderText="BoolVal" SortExpression="BoolVal"
18        Text="BoolVal" />
19      <nb:DropDownListField DataField="Status" HeaderText="Status" SortExpression="Status" EnumType="EntityDesigns.SimpleStatus" />
20    </Columns>
21  </asp:GridView>
22  <br />
23  <asp:DetailsView ID="TestDetail" runat="server" DataSourceID="TestDS" DefaultMode="Insert"
24      AutoGenerateInsertButton="True" AutoGenerateRows="False">
25    <Fields><asp:BoundField DataField="SimpleName" HeaderText="Name" />
26      <asp:CheckBoxField DataField="BoolVal" HeaderText="BoolVal" />
27      <nb:DropDownListField DataField="Status" HeaderText="Status" EnumType="EntityDesigns.SimpleStatus" />
28    </Fields>
29  </asp:DetailsView>
30</form>
31</body>
32</html>

請注意第2和第19,27行。在頁面中,首先要注冊NBear.Web.Data命名空間。接著,在數據控件的Columns中,添加DropDownListField就行了,和ASP.NET內置的的CheckBoxField使用中的唯一區別是,DropDownListField必須額外設置一個EnumType屬性,顧名思義,就是綁定到這個控件Enum字段的類型的FullName。

OK,就是這麼簡單。本頁面中使用到的SimpleStatus如下:

1  public enum SimpleStatus
2  {
3    Value1 = 1,
4    Value2 = 2
5  }
如果運行這個頁面,您將可以看到DropDownList中顯示的是Value1和Value2。

-

等1秒鐘,你一定要說,這還不是我想要的,因為,我需要枚舉值在DropDownList中顯示的文字描述是我需要的自定義信息。

OK,接著就輪到本文的第二個主角——EnumDescriptionAttribute了。

只需要如下使用EnumDescriptionAttribute標注Value1和Value2就行:

1  public enum SimpleStatus
2  {
3    [NBear.Common.EnumDescription(DefaultDescription="Desc of Value1")]
4    Value1 = 1,
5    [NBear.Common.EnumDescription(DefaultDescription="Desc of Value2")]
6    Value2 = 2
7  }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved