다음을 통해 공유


방법: N 계층 데이터 집합에 유효성 검사 추가

업데이트: 2007년 11월

N 계층 솔루션으로 분리된 데이터 집합에 유효성 검사를 추가하는 것은 기본적으로 단일 파일 데이터 집합(단일 프로젝트의 데이터 집합)에 유효성 검사를 추가하는 것과 같습니다. 데이터에 대한 유효성 검사를 수행하기 좋은 위치는 데이터 테이블의 ColumnChanging 및/또는 RowChanging 이벤트가 진행되는 동안입니다.

데이터 집합 디자이너는 데이터 집합에서 데이터 테이블의 열 및 행 변경 이벤트에 사용자 코드를 추가할 수 있는 partial 클래스를 생성하는 기능을 제공합니다. N 계층 솔루션의 데이터 집합에 코드를 추가하는 데 대한 자세한 내용은 방법: N 계층 응용 프로그램에서 데이터 집합에 코드 추가방법: N 계층 응용 프로그램에서 TableAdapter에 코드 추가를 참조하십시오. partial 클래스에 대한 자세한 내용은 방법: 클래스를 부분 클래스로 분할 또는 Partial 클래스 및 메서드(C# 프로그래밍 가이드)를 참조하십시오.

참고:

데이터 집합 프로젝트 속성을 설정하여 데이터 집합을 TableAdapter에서 분리할 때 프로젝트의 기존 partial 데이터 집합 클래스는 자동으로 이동하지 않습니다. 기존의 데이터 집합 partial 클래스는 데이터 집합 프로젝트에 수동으로 옮겨야 합니다.

참고:

데이터 집합 디자이너에서는 ColumnChangingRowChanging 이벤트에 대한 C# 이벤트 처리기가 자동으로 만들어지지 않습니다. 따라서 이벤트 처리기를 수동으로 만들고 내부 이벤트에 해당 이벤트 처리기를 후크해야 합니다. 다음 절차에서는 Visual Basic과 C#에서 필요한 이벤트 처리기를 만드는 단계를 보여 줍니다.

개별 열에 대한 변경 내용 유효성 검사

ColumnChanging 이벤트를 처리하여 개별 열에서 값의 유효성을 검사합니다. 열 값이 수정되면 ColumnChanging 이벤트가 발생합니다. 데이터 집합 디자이너에서 원하는 열을 두 번 클릭하여 ColumnChanging 이벤트에 대한 이벤트 처리기를 만듭니다.

열을 처음 두 번 클릭하면 디자이너가 ColumnChanging 이벤트에 대한 이벤트 처리기를 생성합니다. ColumnChanging 이벤트와 함께 특정 열을 테스트하는 If¢¢ç¦Then 문도 생성됩니다. 예를 들어 Northwind Orders 테이블에서 RequiredDate 열을 두 번 클릭하면 다음 코드가 생성됩니다.

Private Sub OrdersDataTable_ColumnChanging(ByVal sender As System.Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles Me.ColumnChanging
    If (e.Column.ColumnName = Me.RequiredDateColumn.ColumnName) Then
        ' Add validation code here.
    End If
End Sub
참고:

C# 프로젝트에서 데이터 집합 디자이너는 데이터 집합과 데이터 집합의 개별 테이블에 대한 partial 클래스만 생성합니다. 데이터 집합 디자이너에서는 C#에서 Visual Basic과 마찬가지로 ColumnChangingRowChanging 이벤트에 대한 이벤트 처리기를 자동으로 만들지 않습니다. C# 프로젝트에서도 이벤트를 처리하는 메서드를 수동으로 생성하고 내부 이벤트에 해당 메서드를 후크해야 합니다. 다음 절차에서는 Visual Basic과 C#에서 필요한 이벤트 처리기를 만드는 단계를 보여 줍니다.

참고:

다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

개별 열 값이 변경되는 동안 유효성 검사를 추가하려면

  1. 솔루션 탐색기에서 .xsd 파일을 두 번 클릭하여 데이터 집합 디자이너에서 데이터 집합을 엽니다. 자세한 내용은 방법: 데이터 집합 디자이너에서 데이터 집합 열기를 참조하십시오.

  2. 유효성을 검사할 열을 두 번 클릭합니다. 이렇게 하면 ColumnChanging 이벤트 처리기가 만들어집니다.

    참고:

    데이터 집합 디자이너에서는 C# 이벤트에 대한 이벤트 처리기가 자동으로 만들어지지 않습니다. C#에서 이벤트를 처리하는 데 필요한 코드가 아래에 포함되어 있습니다. SampleColumnChangingEvent가 생성된 후 EndInit 메서드의 ColumnChanging 이벤트에 후크됩니다.

  3. e.ProposedValue에 응용 프로그램의 요구 사항에 맞는 데이터가 들어 있는지 확인하는 코드를 추가합니다. 제안된 값이 적합하지 않으면 오류가 있음을 나타내도록 열을 설정합니다.

    다음 코드 예제에서는 Quantity 열에 0보다 큰 값이 들어 있는지 유효성을 검사합니다. Quantity가 0보다 작거나 같으면 열이 오류가 있는 것으로 설정됩니다. Quantity가 0보다 크면 Else 절에서 오류를 지웁니다. 열 변경 이벤트 처리기의 코드는 다음과 같아야 합니다.

    If (e.Column.ColumnName = Me.QuantityColumn.ColumnName) Then
        If CType(e.ProposedValue, Short) <= 0 Then
            e.Row.SetColumnError(e.Column, "Quantity must be greater than 0")
        Else
            e.Row.SetColumnError(e.Column, "")
        End If
    End If
    
    // C#
    // Add this code to the DataTable 
    // partial class.
    
        public override void EndInit()
        {
            base.EndInit();
            // Hook up the ColumnChanging event
            // to call the SampleColumnChangingEvent method.
            ColumnChanging += SampleColumnChangingEvent;
        }
    
        public void SampleColumnChangingEvent(object sender, System.Data.DataColumnChangeEventArgs e)
        {
            if (e.Column.ColumnName == QuantityColumn.ColumnName)
            {
                if ((short)e.ProposedValue <= 0)
                {
                    e.Row.SetColumnError("Quantity", "Quantity must be greater than 0");
                }
                else
                {
                    e.Row.SetColumnError("Quantity", "");
                }
            }
        }
    

전체 열에 대한 변경 내용 유효성 검사

RowChanging 이벤트를 처리하여 전체 열에서 값의 유효성을 검사합니다. 모든 열의 값이 커밋되면 RowChanging 이벤트가 발생합니다. 한 열의 값이 다른 열의 값에 의존하는 경우 RowChanging 이벤트에서 유효성을 검사해야 합니다. Northwind의 Orders 테이블에 있는 OrderDate 및 RequiredDate를 예로 들겠습니다. 주문이 입력되면 유효성 검사에서 주문의 RequiredDate가 OrderDate와 같거나 그 이전인 날짜로 입력되지 않았는지 확인합니다. 이 예제에서는 RequiredDate 및 OrderDate 열 값을 모두 비교해야 하므로 개별 열 변경 내용의 유효성 검사는 의미가 없습니다.

데이터 집합 디자이너에서 테이블의 제목 표시줄에 있는 테이블 이름을 두 번 클릭하여 RowChanging 이벤트에 대한 이벤트 처리기를 만듭니다.

전체 행이 변경되는 동안 유효성 검사를 추가하려면

  1. 솔루션 탐색기에서 .xsd 파일을 두 번 클릭하여 데이터 집합 디자이너에서 데이터 집합을 엽니다. 자세한 내용은 방법: 데이터 집합 디자이너에서 데이터 집합 열기를 참조하십시오.

  2. 디자이너에서 데이터 테이블의 제목 표시줄을 두 번 클릭합니다.

    RowChanging 이벤트 처리기를 통해 partial 클래스가 생성되고 코드 편집기에서 열립니다.

    참고:

    데이터 집합 디자이너는 C# 프로젝트에서 RowChanging 이벤트에 대한 이벤트 처리기를 자동으로 만들지 않습니다. 따라서 메서드를 만들어 RowChanging 이벤트를 처리하고 코드를 실행하여 테이블의 초기화 메서드에서 이벤트를 후크해야 합니다.

  3. partial 클래스 선언 내부에 사용자 코드를 추가합니다.

  4. 다음 코드에서는 Visual Basic에 대한 RowChanging 이벤트가 진행되는 동안 유효성을 검사하는 사용자 코드를 추가하는 위치를 보여 줍니다.

    Partial Class OrdersDataTable
        Private Sub OrdersDataTable_OrdersRowChanging(ByVal sender As System.Object, ByVal e As OrdersRowChangeEvent) Handles Me.OrdersRowChanging
            ' Add logic to validate columns here.
            If e.Row.RequiredDate <= e.Row.OrderDate Then
                ' Set the RowError if validation fails.
                e.Row.RowError = "Required Date cannot be on or before the OrderDate"
            Else
                ' Clear the RowError when validation passes.
                e.Row.RowError = ""
            End If
        End Sub
    End Class
    
  5. 다음 코드에서는 RowChanging 이벤트 처리기를 생성하는 방법과 C#에 대한 RowChanging 이벤트가 진행되는 동안 유효성을 검사하는 사용자 코드를 추가하는 위치를 보여 줍니다

    partial class OrdersDataTable
    {
        public override void EndInit()
        {
            base.EndInit();
            // Hook up the event to the
            // RowChangingEvent method.
            OrdersRowChanging += RowChangingEvent;
        }
    
        public void RowChangingEvent(object sender, OrdersRowChangeEvent e)
        {
            // Perfom the validation logic.
            if (e.Row.RequiredDate <= e.Row.OrderDate)
            {
                // Set the row to an error when validation fails.
                e.Row.RowError = "Required Date cannot be on or before the OrderDate";
            }
            else
            {
                // Clear the RowError if validation passes.
                e.Row.RowError = "";
            }
        }
    }
    

참고 항목

작업

연습: N 계층 데이터 응용 프로그램 만들기

개념

데이터의 새로운 기능

Visual Studio를 사용하여 데이터 응용 프로그램 만들기

N 계층 데이터 응용 프로그램 개요

데이터 유효성 검사 개요