소년포비의 세계정복!!

DataColumn 관련 본문

프로그램 세상/C#

DataColumn 관련

소년포비 2009. 9. 28. 09:00

오늘은 DataColumn에 관해 잠깐 얘기해볼까 합니다.


오늘의 준비물은 데이타그리드뷰와 텍스트 박스와 버튼입니다.

1.샘플에서 사용할 데이타를 먼저 만듭니다.

데이타를 생성후 그리드뷰에 바인딩까지 시켜줍니다.

2.'적용'을 눌렀을때 이벤트 코드를 보겠습니다.

바인딩 된 테이블의 "수식" 컬럼의 expression 속성을 텍스트박스에서 입력한 값으로 설정을 하는것으로
오늘의 샘플은 완성입니다. ㅋㅋ

자.. 그럼 실행을 해보죠!!

수식에 '단가'컬럼과 '판매수량'컬럼의 곱한 값을 넣는 수식을 넣었습니다.
적용 버튼을 눌러보면 수식 컬럼에  '단가 * 판매수량'의 값이 나오게되죠 ^^

오늘의 핵심 속성은 DataColumn의 expression 이라는 속성입니다.
이 속성을 잘 이용하면 다양한 형태의 수식을 사용할수 있죠..
일반적으로 데이타를 가져오는 SP에서 원하는 값을 계산하기도 하지만
데이타 컬럼에 수식을 통해서도 비슷한 효과를 낼수 있죠 ^^

그럼 expression 에서 지원되는 함수를 알아보겠습니다. 
MSDN을 보면 expression 는
"행을 필터링하거나 열의 값을 계산하거나 집계 열을 만드는 데 사용되는 식을 가져오거나 설정합니다. "
라고 정의 하고있습니다.

expression 속성을 사용하는 경우 중 하나는 계산 열을 만들 때입니다. 예를 들어, 과세 가격을 계산하려면 단가에 특정 지역의 세율을 곱합니다. 세율은 지역에 따라 다르기 때문에 열에 단일 세율을 넣을 수 없으므로 다음 섹션의 Visual Basic 코드에 표시된 것처럼 expression 속성을 사용하여 값을 계산합니다.

DataSet1.Tables("Products").Columns("tax").expression = "UnitPrice * 0.086"

또 다른 경우는 집계 열을 만들 때입니다. 계산 값과 마찬가지로 집계도 DataTable의 전체 행 집합을 기반으로 작업을 수행합니다. 간단한 예제에서 집합에 반환된 행 수를 계산합니다. 이 Visual Basic 코드에 표시된 것처럼 특정 판매원이 완료한 트랜잭션 수를 계산할 때 이 메서드를 사용합니다.


 DataSet1.Tables("Orders").Columns("OrderCount").expression = "Count(OrderID)"

식 구문


식을 만들 때 ColumnName 속성을 사용하여 열을 참조합니다. 예를 들어, 두 열의 ColumnName이 각각 "UnitPrice"와 "Quantity"인 경우 식은 다음과 같습니다.

"UnitPrice * Quantity"


참고

열이 식에 사용될 경우 해당 식은 해당 열에 종속되었다고 합니다. 종속된 열의 이름을 바꾸거나 종속된 열을 제거할 경우에는 예외가 throw되지 않습니다. 예외는 현재 중단된 식의 열에 액세스할 때 throw됩니다.

필터에 대한 식을 만드는 경우 문자열을 작은따옴표로 묶습니다.

"LastName = 'Jones'"

다음 문자들은 특수 문자이며 여기서 설명하는 것처럼 열 이름에 사용할 경우 이스케이프되어야 합니다.

\n(줄 바꿈)

\t(탭)

\r(캐리지 리턴)

~

(

)

#

\

/

=

>

<

+

-

*

%

&

|

^

'

"

[

]

열 이름에 위 문자 중 하나가 있으면 이름을 대괄호로 묶어야 합니다. 예를 들어, 식에 열 이름 "Column#"을 사용하려면 "[Column#]"이라고 쓰면 됩니다.

Total * [Column#]

대괄호는 특수 문자이기 때문에 열 이름에 포함되는 경우 슬래시("\")를 사용하여 이스케이프해야 합니다. 예를 들어, 열 이름이 "Column[]"이면 다음과 같이 씁니다.

Total * [Column[\]]

둘째 대괄호만 이스케이프해야 합니다.

사용자 정의 값

사용자 정의 값은 식에서 열 값과 비교하기 위해 사용될 수 있습니다. 문자열 값은 작은따옴표로 묶어야 합니다. 날짜 값은 파운드 기호(#)로 묶어야 합니다. 10진수 및 지수 표기법으로 숫자 값을 표시할 수 있습니다. 예를 들면 다음과 같습니다.

"FirstName = 'John'"

"Price <= 50.00"

"Birthdate < #1/31/82#"

열거형 값이 포함된 열에서는 값을 정수 데이터 형식으로 캐스팅합니다. 예를 들면 다음과 같습니다.

"EnumColumn = 5"

연산자

Boolean AND, OR 및 NOT 연산자를 사용하여 연결할 수 있습니다. 괄호를 사용하여 절을 묶어서 우선 순위를 적용할 수 있습니다. AND 연산자는 다른 연산자에 우선합니다. 예를 들면 다음과 같습니다.

(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

비교식을 만들 때는 다음과 같은 연산자를 사용할 수 있습니다.

<

>

<=

>=

<>

=

IN

LIKE

또한 다음과 같은 산술 연산자가 지원됩니다.

+(더하기)

-(빼기)

*(곱하기)

/(나누기)

%(나머지)

문자열 연산자

문자열을 연결하려면 + 문자를 사용합니다. DataSet 클래스의 CaseSensitive 속성 값은 문자열 비교의 대/소문자 구분 여부를 결정합니다. 그러나 이 값은 DataTable 클래스의 CaseSensitive 속성으로 재정의할 수 있습니다.

와일드카드 문자

*와 %는 모두 LIKE 비교에서 와일드카드 문자로 교대로 사용할 수 있습니다. LIKE 절의 문자열에 * 또는 %가 있으면 이들 문자는 대괄호([])로 이스케이프해야 합니다. 대괄호가 절에 있으면 대괄호 문자를 대괄호로 이스케이프해야 합니다(예: [[] 또는 []]). 와일드카드는 패턴의 시작과 끝 부분, 패턴의 끝 부분 또는 패턴의 시작 부분에 사용할 수 있습니다. 예를 들면 다음과 같습니다.

"ItemName LIKE '*product*'"

"ItemName LIKE '*product'"

"ItemName LIKE 'product*'"

문자열의 중간에는 와일드카드 문자를 사용할 수 없습니다. 예를 들어 'te*xt'는 사용할 수 없습니다.

부모/자식 관계 참조

열 이름 앞에 Parent를 붙여 식에서 부모 테이블을 참조할 수 있습니다. 예를 들어, Parent.Price는 이름이 Price인 부모 테이블의 열을 참조합니다.

열 이름 앞에 Child를 붙여 식에서 자식 테이블에 있는 열을 참조할 수 있습니다. 그러나 자식 관계는 여러 행을 반환할 수 있으므로 자식 열에 대한 참조를 집계 함수에 포함시켜야 합니다. 예를 들어, Sum(Child.Price)은 자식 테이블에서 이름이 Price인 열의 합을 반환합니다.

테이블에 여러 자식이 있는 경우 구문은 Child(RelationName)입니다. 예를 들어, 테이블에 이름이 CustomersOrders인 자식 테이블과 Customers2Orders라는 DataRelation 개체가 있으면 참조는 다음과 같습니다.

Avg(Child(Customers2Orders).Quantity)

집계

다음과 같은 집계 형식이 지원됩니다.

Sum(합계)

Avg(평균)

Min(최소값)

Max(최대값)

Count(개수)

StDev(통계적 표준 편차)

Var(통계적 분산)

집계는 일반적으로 관계를 따라 수행됩니다. 앞에 나열한 함수 중 하나와 앞의 부모/자식 관계 참조에서 설명한 자식 테이블 열 하나를 사용하여 집계식을 만듭니다. 예를 들면 다음과 같습니다.

Avg(Child.Price)

Avg(Child(Orders2Details).Price)

단일 테이블에서 집계를 수행할 수도 있습니다. 예를 들어, 이름이 "Price"인 열의 수치 집계를 만드는 식은 다음과 같습니다.

Sum(Price)


참고

단일 테이블을 사용하여 집계를 만드는 경우 그룹화 기능이 없는 대신 열의 모든 행에 같은 값이 표시됩니다.

테이블에 행이 없으면 집계 함수는 Null 참조(Visual Basic의 경우 Nothing)을 반환합니다.

데이터 형식은 항상 열의 DataType 속성을 검사하여 결정할 수 있습니다. 다음 섹션에 표시된 Convert 함수를 사용하여 데이터 형식을 변환할 수도 있습니다.

FUNCTIONS

다음과 같은 함수도 지원됩니다.

CONVERT

설명

특정 식을 지정된 .NET Framework 형식으로 변환합니다.

구문

Convert(expression, type)

인수

expression -- 변환할 식입니다.

type -- 값을 변환할 대상 .NET Framework 형식입니다.

예제: myDataColumn.expression="Convert(total, 'System.Int32')"

다음을 제외한 모든 변환이 유효합니다. Boolean은 자체 변환 및 Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, String과의 변환만 가능합니다. Char는 자체 변환 및 Int32, UInt32, String과의 변환만 가능합니다. DateTime은 자체 변환 및 String과의 변환만 가능합니다. TimeSpan은 자체 변환 및 String과의 변환만 가능합니다.


LEN

설명

문자열의 길이를 가져옵니다.

구문

LEN(expression)

인수

expression -- 계산할 문자열입니다.

예제: myDataColumn.expression="Len(ItemName)"


ISNULL

설명

식을 확인하고 확인된 식이나 대체 값을 반환합니다.

구문

ISNULL(expression, replacementvalue)

인수

expression -- 확인할 식입니다.

replacementvalue -- 식이 Null 참조(Visual Basic의 경우 Nothing)이면 replacementvalue가 반환됩니다.

예제: myDataColumn.expression="IsNull(price, -1)"


IIF

설명

논리식의 결과에 따라 두 값 중 하나를 가져옵니다.

구문

IIF(expr, truepart, falsepart)

인수

expr -- 계산할 식입니다.

truepart -- 식이 true인 경우에 반환될 값입니다.

falsepart -- 식이 false인 경우에 반환될 값입니다.

예제: myDataColumn.expression = "IIF(total>1000, 'expensive', 'dear')


TRIM

설명

\r, \n, \t, ' ' 등과 같은 앞뒤에 오는 공백 문자를 모두 제거합니다.

구문

TRIM(expression)

인수

expression -- 트리밍할 식입니다.


SUBSTRING

설명

문자열의 지정된 위치에서 시작하여 지정된 길이의 부분 문자열을 가져옵니다.

구문

SUBSTRING(expression, start, length)

인수

expression -- 부분 문자열의 소스 문자열입니다.

start -- 부분 문자열의 시작 위치를 지정하는 정수입니다.

length -- 부분 문자열의 길이를 지정하는 정수입니다.

예제: myDataColumn.expression = "SUBSTRING(phone, 7, 8)"


참고

null 값이나 빈 문자열을 할당하여 expression 속성을 다시 설정할 수 있습니다. 식 열에 기본값을 설정한 경우 expression 속성을 다시 설정하면 이전에 채워진 모든 행에 기본값이 할당됩니다.

 

원본 위치 <http://msdn.microsoft.com/ko-kr/library/system.data.datacolumn.expression(VS.80).aspx>

위의 함수에 관한 설명은 MSDN에서 가져왔습니다.

짧은 내용이지만.. expression 속성 쉽게 무시 할수 없는 유용한 속성임에는 확실합니다.
좋은하루되세요.. 다음주에는 알찬내용으로 찾아뵙겠습니다. ^^