Share via


방법: ListObject 컨트롤에 새 행을 추가할 때 데이터 유효성 검사

사용자가 데이터에 바인딩된 ListObject 컨트롤에 새 행을 추가할 수 있습니다. 변경 내용을 데이터 소스에 커밋하기 전에 사용자 데이터의 유효성을 검사할 수 있습니다.

적용 대상: 이 항목의 정보는 Excel 2007 및 Excel 2010의 문서 수준 프로젝트 및 응용 프로그램 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

데이터 유효성 검사

데이터에 바인딩된 ListObject에 행이 추가될 때마다 BeforeAddDataBoundRow 이벤트가 발생합니다. 이 이벤트를 처리하여 데이터 유효성 검사를 수행할 수 있습니다. 예를 들어, 18세에서 65세 사이의 직원만 데이터 소스에 추가할 수 있도록 응용 프로그램을 만들어야 하는 경우 행이 추가되기 전에 입력된 나이가 해당 범위에 포함되는지 확인할 수 있습니다.

참고

클라이언트뿐만 아니라 서버에서도 항상 사용자 입력을 확인해야 합니다. 자세한 내용은 보안 클라이언트 응용 프로그램(ADO.NET)를 참조하십시오.

데이터 바인딩된 ListObject에 새 행이 추가될 때 데이터 유효성을 검사하려면

  1. 클래스 수준에서 ID와 DataTable에 대한 변수를 만듭니다.

    Dim id As Integer = 0
    Dim employeeTable As System.Data.DataTable
    
    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. DataTable을 만들고 Sheet1 클래스(문서 수준 프로젝트의 경우) 또는 ThisAddIn 클래스(응용 프로그램 수준 프로젝트의 경우)의 Startup 이벤트 처리기에 샘플 열과 데이터를 추가합니다.

    employeeTable = New System.Data.DataTable("Employees")
    
    Dim column As System.Data.DataColumn = _
        employeeTable.Columns.Add("Id", GetType(Int32))
    column.AllowDBNull = False
    
    employeeTable.Columns.Add("FirstName", GetType(String))
    employeeTable.Columns.Add("LastName", GetType(String))
    employeeTable.Columns.Add("Age", GetType(Int32))
    
    employeeTable.Rows.Add(id, "Nancy", "Anderson", 56)
    employeeTable.Rows.Add(id, "Robert", "Brown", 44)
    id += 1
    
    list1.SetDataBinding(employeeTable, "", "FirstName", "LastName", "Age")
    
    employeeTable = new System.Data.DataTable("Employees");
    
    System.Data.DataColumn column = employeeTable.Columns.Add
        ("Id", typeof(int));
    column.AllowDBNull = false;
    
    employeeTable.Columns.Add("FirstName", typeof(string));
    employeeTable.Columns.Add("LastName", typeof(string));
    employeeTable.Columns.Add("Age", typeof(int));
    
    employeeTable.Rows.Add(id, "Nancy", "Anderson", "56");
    employeeTable.Rows.Add(id, "Robert", "Brown", "44");
    id++;
    
    list1.SetDataBinding(employeeTable, "", "FirstName", "LastName", "Age");
    
    list1.BeforeAddDataBoundRow +=new Microsoft.Office.Tools.Excel.
        BeforeAddDataBoundRowEventHandler(list1_BeforeAddDataBoundRow);
    
  3. 입력한 나이가 적용 가능한 범위 내에 있는지 여부를 확인하기 위한 코드를 list1_BeforeAddDataBoundRow 이벤트 처리기에 추가합니다.

    Private Sub list1_BeforeAddDataBoundRow(ByVal sender As Object, ByVal e As  _
        Microsoft.Office.Tools.Excel.BeforeAddDataBoundRowEventArgs) _
        Handles list1.BeforeAddDataBoundRow
    
        Dim row As System.Data.DataRow = (CType(e.Item, System.Data.DataRowView)).Row
    
        If Not row("Age") Is Nothing And Not row("Age") Is Convert.DBNull Then
    
            Dim ageEntered As Integer = CType(row("Age"), Int32)
    
            If ageEntered < 21 Or ageEntered > 65 Then
                System.Windows.Forms.MessageBox.Show _
                    ("Age must be between 21 and 65. The row cannot be added.")
                e.Cancel = True
                Return
            End If
    
            row("ID") = id
            id += 1
    
        Else
            System.Windows.Forms.MessageBox.Show("You must enter an age.")
            e.Cancel = True
        End If
    End Sub
    
    private void list1_BeforeAddDataBoundRow(object sender,
        Microsoft.Office.Tools.Excel.BeforeAddDataBoundRowEventArgs e)
    {
        System.Data.DataRow row = ((System.Data.DataRowView)e.Item).Row;
    
        if (row["Age"] != null && row["Age"] != Convert.DBNull)
        {
            int ageEntered = (int)row["Age"];
    
            if (ageEntered < 21 || ageEntered > 65)
            {
                System.Windows.Forms.MessageBox.Show
                    ("Age must be between 21 and 65. The row cannot be added.");
                e.Cancel = true;
                return;
            }
            row["ID"] = id;
            id++;
        }
        else
        {
            System.Windows.Forms.MessageBox.Show("You must enter an age.");
            e.Cancel = true;
        }
    }
    

코드 컴파일

이 코드 예제에서는 이 코드가 나타나는 워크시트에 list1이라는 기존의 ListObject가 있는 것으로 가정합니다.

참고 항목

작업

방법: 데이터에 ListObject 열 매핑

개념

런타임에 응용 프로그램 수준 추가 기능의 Word 문서 및 Excel 통합 문서 확장

런타임에 Office 문서에 컨트롤 추가

ListObject 컨트롤

확장된 개체를 사용하여 Excel 자동화

기타 리소스

Office 문서의 컨트롤