이 문서에서는 독자에게 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<%@ 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="서버">
6 <title>NBear 데이터소스 테스트</title>
7</head>
8<본문>
9<form id="aspnetForm" runat="서버">
10 <nb:NBearDataSource ID="TestDS" runat="서버" ConnectionStringName="테스트 액세스 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 <컬럼>
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 텍스트="부울값" />
19 <nb:DropDownListField DataField="상태" HeaderText="상태" SortExpression="상태" EnumType="EntityDesigns.SimpleStatus" />
20 </열>
21 </asp:그리드뷰>
22 <br />
23 <asp:DetailsView ID="TestDetail" runat="서버" DataSourceID="TestDS" DefaultMode="삽입"
24 AutoGenerateInsertButton="참" AutoGenerateRows="거짓">
25 <필드><asp:BoundField DataField="SimpleName" HeaderText="이름" />
26 <asp:CheckBoxField DataField="BoolVal" HeaderText="BoolVal" />
27 <nb:DropDownListField DataField="상태" HeaderText="상태" EnumType="EntityDesigns.SimpleStatus" />
28 </필드>
29 </asp:DetailsView>
30</form>
31</body>
32</html>
2행과 19,27행을 참고하세요. 페이지에서 먼저 NBear.Web.Data 네임스페이스를 등록하세요. 그런 다음 DropDownListField를 데이터 컨트롤의 열에 추가하면 됩니다. ASP.NET의 기본 제공 CheckBoxField 사용과 유일한 차이점은 DropDownListField가 이름에서 알 수 있듯이 추가 EnumType 속성을 설정해야 한다는 것입니다. 이 컨트롤의 Enum 필드입니다.
좋아요, 정말 간단해요. 이 페이지에서 사용되는 SimpleStatus는 다음과 같습니다:
1 공개 열거형 SimpleStatus
2 {
3 값1 = 1,
4 값2 = 2
5}
이 페이지를 실행하면 DropDownList에 Value1과 Value2가 표시되는 것을 볼 수 있습니다.
기다리십시오
. DropDownList의 열거 값을 표시하는 데 필요한 텍스트 설명이 필요한 사용자 정의 정보이기 때문에 이것이 아직 내가 원하는 것이 아니라고 말해야 합니다.
자, 이제 이 기사의 두 번째 주인공인 EnumDescriptionAttribute의 차례입니다.
EnumDescriptionAttribute를 사용하여 다음과 같이 Value1 및 Value2에 주석을 답니다.
1 public enum SimpleStatus
2 {
3 [NBear.Common.EnumDescription(DefaultDescription="값 1의 설명")]
4 값1 = 1,
5 [NBear.Common.EnumDescription(DefaultDescription="값 2의 설명")]
6 값2 = 2
7}
좋습니다. 추가 설정은 필요하지 않습니다. 위의 페이지를 실행하면 DropDownList에 표시된 텍스트가 우리가 지정한 사용자 정의 정보임을 확인할 수 있습니다. 멋지지 않나요?
-1
초만 더 기다려도 만족할 수 없습니다. 사용자 정의 설명 정보를 지정할 수 있지만 다중 언어 환경인 경우 런타임 시 열거형 값에 대해 다른 텍스트 정보를 표시해야 하는 경우가 많습니다. , 데이터베이스의 열거 설명 테이블에서 열거의 설명 정보를 읽어야 합니다.
우리는 이에 대한 해결책을 확실히 갖고 있습니다.
EnumDescriptionAttribute만 상속하면 됩니다. 다음 MyEnumDescriptionAttribute는 사용자 정의 열거형 설명 구현을 보여줍니다.
1 공용 클래스 MyEnumDescriptionAttribute : NBear.Common.EnumDescriptionAttribute
2 {
3 private static string[] customDescs = new string[] { "custom desc of Value1", null } //열거형 정의에 설정된 DefaultDescription을 사용하려면 여기서 두 번째 값은 null입니다.
4
5 공개 재정의 문자열 GetDescription(객체 enumValue)
6 {
7 return customDescs[(int)enumValue] ?? base.GetDescription(enumValue);
8}
9}
이 클래스는 EnumDescriptionAttribute의 GetDescription() 메서드를 오버로드하여 메모리의 배열에서 설명 정보를 읽습니다. 마찬가지로 여기에서는 리소스 파일이나 데이터베이스의 설명 정보를 읽을 수도 있습니다.
열거형 값에 대해 사용자 지정 메서드가 사용자 지정 설명 정보를 가져올 수 없는 경우 먼저 이 열거형 값으로 주석이 달린 MyEnumDescriptionAttribute가 지정된 경우 이 콘텐츠를 반환하는지 확인합니다. 그렇지 않으면 열거형 값의 ToString() 콘텐츠를 반환합니다.
MyEnumDescriptionAttribute를 사용하여 SimpleStatus를 다음과 같이 설명합니다.
1개의 공개 열거형 SimpleStatus
2 {
3 [MyEnumDescription(DefaultDescription="값의 기본 설명1")]
4 값1 = 1,
5 [MyEnumDescription(DefaultDescription="값 2의 기본 설명")]
6 값2 = 2
7}
페이지를 다시 실행하면 DropDownList의 Value1에 해당하는 정보가 Value1의 사용자 정의 설명이고 Value2에 해당하는 정보가 Value2의 기본 설명임을 알 수 있습니다. 왜? Value1의 경우 MyEnumDescriptionAttribute에서 반환된 사용자 지정 정보를 얻을 수 있고 Value2의 경우 MyEnumDescriptionAttribute가 null을 반환하면 기본 설명 정보가 적용됩니다. 놀랍지 않나요?
심지어 다양한 EnumDescriptionAttribute 또는 상속된 클래스를 혼합하여 사용하여 동일한 Enum 유형의 다양한 멤버 항목에 대한 설명 정보를 지정할 수도 있습니다(필요한 경우^-^). 그러나 첫 번째 EnumDescriptionAttribute 또는 상속된 클래스 주석만 각 열거 항목에 적용되며 중복 주석은 무시됩니다.
자, 감히 이 계획은 완벽한 계획이라고 할 수 있습니다. 썩은 계란을 던지지 마세요. :)
외에도
EnumDescriptionAttribute만 사용하여 열거 값 설명 정보를 투명하게 얻을 수도 있습니다. 정적 메서드 EnumDescriptionAttribute.GetDescriptions(enumType)를 호출하면 EnumDescriptionAttribute 또는 상속된 클래스로 표시된 지정된 열거 유형의 모든 열거 값에 대한 설명 정보를 가져올 수 있습니다.
DropDownListField 클래스는 ASP.NET의 기본 제공 CheckBoxField 클래스를 참조하여 작성되었습니다.
본 글에서 소개하는 컴포넌트의 모든 소스코드와 샘플코드는 최신 버전의 nbear에 포함되어 있습니다. EnumDescriptionAttribute는 srcNBear.CommonEnumDescriptionAttribute.cs에 정의되어 있고, DropDownListField는 srcNBear.Web.Data에 정의되어 있습니다
.
DropDownListField. 샘플 프로그램은 tutorialsNBearDataSourceSample에 있습니다.
NBear의 공식 웹사이트 (http://nbear.org) 에서 다운로드할 수 있습니다.
-
[05/26 개정] - 타사 열거 설명에 대한 지원과 바이너리 및 일반 열거 값에 대한 지원이 추가되었습니다. NBearV3.7.1 빌드 7 이상에 포함되어 있습니다.
1. 타사 컴파일 어셈블리의 열거형 유형의 경우, 즉 열거형 정의에 EnumDescriptionAttribute를 직접 추가할 수 있는 기회가 없으므로 이제 지원됩니다. 두 열거형의 열거 항목의 int 값이 동일한지 확인하기 위해 외부 열거형에 해당하는 추가 열거형을 정의하고 이 새 열거형에 EnumDescriptionAttribute를 표시하기만 하면 됩니다. 물론 이때 EnumType 속성은 새로운 열거형 이름으로 채워져야 합니다.
2. 이제 별도의 설정 없이 바이너리 AND를 지원하는 열거형 값도 지원됩니다. 그러나 이 열거형 값의 삽입 및 편집을 병합된 값으로 업데이트해야 하는 경우 사용자는 이를 완료하기 위해 여전히 코드를 작성해야 합니다. 이는 해당 값 표시만 지원합니다.
//이 글의 끝