다음을 통해 공유


DataRow.BeginEdit 메서드

DataRow 개체에 대한 편집 작업을 시작합니다.

네임스페이스: System.Data
어셈블리: System.Data(system.data.dll)

구문

‘선언
Public Sub BeginEdit
‘사용 방법
Dim instance As DataRow

instance.BeginEdit
public void BeginEdit ()
public:
void BeginEdit ()
public void BeginEdit ()
public function BeginEdit ()

예외

예외 형식 조건

InRowChangingEventException

RowChanging 이벤트 내부에서 메서드를 호출한 경우

DeletedRowInaccessibleException

삭제된 행에서 메서드를 호출한 경우

설명

BeginEdit 메서드를 사용하여 DataRow를 편집 모드로 지정합니다. 이 모드에서는 이벤트가 일시 중단되어 유효성 검사 규칙을 트리거하지 않고도 여러 행을 함께 변경할 수 있습니다. 예를 들어, 총량에 대한 열 값이 행의 차변 및 신용 열에 대한 값과 같아야 할 경우 각 행을 편집 모드로 만들어 사용자가 값을 커밋하려고 할 때까지 행 값의 유효성 검사를 미룰 수 있습니다.

사용자가 데이터 바인딩된 컨트롤의 값을 변경하면 BeginEdit 메서드가 암시적으로 호출되고, DataTable 개체의 AcceptChanges 메서드를 호출하면 EndEdit 메서드가 암시적으로 호출됩니다. 편집 모드인 동안에는 DataRow에 원래 및 새 제안된 값의 표현이 저장됩니다. 따라서 EndEdit 메서드가 호출되지 않는 동안에는 Item 속성의 version 매개 변수에 대해 DataRowVersion.Original 또는 DataRowVersion.Proposed를 전달하여 원래 버전이나 제안된 버전을 검색할 수 있습니다. 또한 CancelEdit 메서드를 호출하여 편집을 취소할 수도 있습니다.

행에 원래 값이나 제안된 값이 있는지 확인하려면 HasVersion 메서드를 호출합니다.

예제

이 예제에서는 한 개의 DataColumn 개체, 다섯 개의 DataRow 개체 및 UniqueConstraint가 있는 간단한 DataTable을 만듭니다. 또한 RowChanged 이벤트 처리기를 추가하여 행의 값이 바뀌는 시기를 모니터링합니다. 기존 행에서 BeginEdit을 호출하면 제약 조건과 이벤트를 일시적으로 사용할 수 없고 원래 값과 제안된 값이 출력됩니다. BeginEdit을 다시 호출하여 두 행을 같은 값으로 설정합니다. EndEdit을 호출하면 UniqueConstraint가 동일한 값에 적용됩니다.

Private Sub DemonstrateRowBeginEdit()
    Dim table As New DataTable("table1")
    Dim column As New DataColumn("col1", Type.GetType("System.Int32"))
    AddHandler table.RowChanged, AddressOf Row_Changed
    table.Columns.Add(column)

    ' Add a UniqueConstraint to the table.
    table.Constraints.Add(New UniqueConstraint(column))

    ' Add five rows.
    Dim newRow As DataRow
       
    Dim i As Integer
    For i = 0 To 4
        ' RowChanged event will occur for every addition.
        newRow = table.NewRow()
        newRow(0) = i
        table.Rows.Add(newRow)
    Next i

    ' AcceptChanges.
    table.AcceptChanges()

    ' Invoke BeginEdit on each.
    Console.WriteLine(ControlChars.Cr _
       & " Begin Edit and print original and proposed values " _
       & ControlChars.Cr)
    Dim row As DataRow
    For Each row In  table.Rows           
        row.BeginEdit()
        row(0) = CInt(row(0)) & 10
        Console.Write(ControlChars.Tab & " Original " & ControlChars.Tab _
           & row(0, DataRowVersion.Original).ToString())
        Console.Write(ControlChars.Tab & " Proposed " & ControlChars.Tab _
           & row(0, DataRowVersion.Proposed).ToString() & ControlChars.Cr)
    Next row
    Console.WriteLine(ControlChars.Cr)

    ' Accept changes
    table.AcceptChanges()

    ' Change two rows to identical values after invoking BeginEdit.
    table.Rows(0).BeginEdit()
    table.Rows(1).BeginEdit()
    table.Rows(0)(0) = 100
    table.Rows(1)(0) = 100
    Try
        ' Now invoke EndEdit. This will cause the UniqueConstraint
        ' to be enforced.
        table.Rows(0).EndEdit()
        table.Rows(1).EndEdit()
    Catch e As Exception
    ' Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.", _
           e.GetType().ToString())
    End Try
End Sub

Private Sub Row_Changed _
(sender As Object, e As System.Data.DataRowChangeEventArgs)
    Dim table As DataTable = CType(sender, DataTable)
    Console.WriteLine("RowChanged " & e.Action.ToString() _
       & ControlChars.Tab & e.Row.ItemArray(0).ToString())
End Sub
private void DemonstrateRowBeginEdit()
{
    DataTable table = new DataTable("table1");
    DataColumn column = new 
        DataColumn("col1",Type.GetType("System.Int32"));
    table.RowChanged+=new 
        DataRowChangeEventHandler(Row_Changed);
    table.Columns.Add(column);

    // Add a UniqueConstraint to the table.
    table.Constraints.Add(new UniqueConstraint(column));

    // Add five rows.
    DataRow newRow;
   
    for(int i = 0;i<5; i++)
    {
        // RowChanged event will occur for every addition.
        newRow= table.NewRow();
        newRow[0]= i;
        table.Rows.Add(newRow);
    }
    // AcceptChanges.
    table.AcceptChanges();

    // Invoke BeginEdit on each.
    Console.WriteLine(
        "\n Begin Edit and print original and proposed values \n");
    foreach(DataRow row in table.Rows)
    {
   
        row.BeginEdit();
        row[0]=(int) row[0]+10;
        Console.Write("\table Original \table" + 
            row[0, DataRowVersion.Original]);
        Console.Write("\table Proposed \table" + 
            row[0,DataRowVersion.Proposed] + "\n");
    }
    Console.WriteLine("\n");
    // Accept changes
    table.AcceptChanges();
    // Change two rows to identical values after invoking BeginEdit.
    table.Rows[0].BeginEdit();
    table.Rows[1].BeginEdit();
    table.Rows[0][0]= 100;
    table.Rows[1][0]=100;
    try
    {
        /* Now invoke EndEdit. This will cause the UniqueConstraint
           to be enforced.*/
        table.Rows[0].EndEdit();
        table.Rows[1].EndEdit();
    }
    catch(Exception e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.", 
            e.GetType());
    }
}
 
private void Row_Changed(object sender, 
    System.Data.DataRowChangeEventArgs e)
{
    DataTable table = (DataTable)  sender;
    Console.WriteLine("RowChanged " + e.Action.ToString() 
        + "\table" + e.Row.ItemArray[0]);
}

플랫폼

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

DataRow 클래스
DataRow 멤버
System.Data 네임스페이스
AcceptChanges
CancelEdit
EndEdit
HasVersion
Item
RowState