다음을 통해 공유


방법: ListObject 컨트롤에 새 행이 추가될 때 오류 처리

업데이트: 2008년 7월

적용 대상

이 항목의 정보는 지정된 Visual Studio Tools for Office 프로젝트 및 Microsoft Office 버전에만 적용됩니다.

문서 수준 프로젝트

  • Excel 2007

  • Excel 2003

응용 프로그램 수준 프로젝트

  • Excel 2007

자세한 내용은 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

사용자가 데이터에 바인딩된 ListObject 컨트롤에 새 행을 추가할 수 있습니다. 일부 경우에는 목록 개체와 데이터 소스의 관계로 인해 루틴 오류가 발생할 수 있습니다. 예를 들어 ListObject에 표시하려는 열을 매핑할 수 있으므로, null 값을 사용할 수 없는 필드 같이 제한 사항이 있는 열을 지정하지 않으면 행을 만들 때마다 오류가 발생합니다. ErrorAddDataBoundRow 이벤트의 이벤트 처리기에서 누락 값을 추가하는 코드를 작성할 수 있습니다.

데이터 바인딩된 행을 추가할 때 발생하는 오류를 처리하려면

  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.ErrorAddDataBoundRow += new Microsoft.Office.Tools.Excel.
        ErrorAddDataBoundRowEventHandler(list1_ErrorAddDataBoundRow);
    
  3. ErrorAddDataBoundRow 이벤트의 이벤트 처리기에서 Id 필드에 다음 ID 번호를 추가하고 행을 다시 추가합니다.

    Private Sub list1_ErrorAddDataBoundRow(ByVal sender As Object, ByVal e As  _
        Microsoft.Office.Tools.Excel.ErrorAddDataBoundRowEventArgs) _
        Handles list1.ErrorAddDataBoundRow
    
        Dim row As System.Data.DataRow = (CType(e.Item, System.Data.DataRowView)).Row
    
        If TypeOf (e.InnerException) Is NoNullAllowedException Then
            row("Id") = id
            id += 1
            e.Retry = True
        End If
    End Sub
    
    private void list1_ErrorAddDataBoundRow(object sender,
        Microsoft.Office.Tools.Excel.ErrorAddDataBoundRowEventArgs e)
    {
        System.Data.DataRow row = ((System.Data.DataRowView)e.Item).Row;
    
        if (e.InnerException is NoNullAllowedException)
        {
            row["Id"]= id;
            id++;
            e.Retry = true;
        }
    }
    

코드 컴파일

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

참고 항목

작업

방법: 데이터에 ListObject 열 매핑

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

개념

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

Excel 응용 프로그램 수준 추가 기능 개발

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

ListObject 컨트롤

ListObject 열 및 행 순서 지속성 이해

기타 리소스

Office 문서의 컨트롤

Excel 호스트 컨트롤

변경 기록

날짜

변경 내용

원인

2008년 7월

응용 프로그램 수준 추가 기능에 사용할 수 있도록 예제가 수정되었습니다.

SP1 기능 변경