DataTable 편집
업데이트: November 2007
DataRow에서 열 값을 변경하는 경우, 변경된 값은 현재 상태의 행에 바로 저장됩니다. 그런 다음 DataRowState가 Modified로 설정되며, DataRow의 AcceptChanges 또는 RejectChanges 메서드를 사용하여 변경된 내용을 승인하거나 거부합니다. 또한 DataRow에서는 편집하는 동안 행의 상태를 일시 중단하는 데 사용할 수 있는 세 개의 메서드를 제공합니다. 이러한 메서드에는 BeginEdit, EndEdit 및 CancelEdit이 있습니다.
사용자가 DataRow에서 열 값을 직접 수정하는 경우, DataRow는 Current, Default 및 Original 행 버전을 사용하여 열 값을 관리합니다. 이러한 행 버전 이외에도 BeginEdit, EndEdit 및 CancelEdit 메서드에서는 네 번째 행 버전인 Proposed를 사용합니다. 행 버전에 대한 자세한 내용은 행 상태 및 행 버전을 참조하십시오.
Proposed 행 버전은 편집 동작을 수행하는 중에 나타납니다. 편집 동작은 BeginEdit을 호출하여 시작되고 EndEdit 또는 CancelEdit을 사용하거나 AcceptChanges 또는 RejectChanges를 호출하면 종료됩니다.
편집 동작을 수행하는 중에 사용자는 DataTable의 ColumnChanged 이벤트에서 ProposedValue를 검사하여 개별 열에 유효성 검사 논리를 적용할 수 있습니다. ColumnChanged 이벤트에는 변경 중인 열 및 ProposedValue를 참조하는 DataColumnChangeEventArgs가 포함되어 있습니다. 사용자는 제안된 값을 검사한 후 이 값을 수정하거나 편집을 취소할 수 있습니다. 편집을 종료하면 행의 상태가 Proposed에서 변경됩니다.
사용자는 EndEdit을 호출하여 편집을 확인하거나 CancelEdit을 호출하여 편집을 취소할 수 있습니다. EndEdit은 편집을 확인하지만 DataSet은 AcceptChanges가 호출된 후에야 변경 내용을 실제로 승인합니다. 또한 EndEdit이나 CancelEdit을 사용하여 편집을 종료하기 전에 AcceptChanges를 호출하면 편집이 종료되고 Current 및 Original 행 버전 모두에 대해 Proposed 행 값이 승인됩니다. 마찬가지로 RejectChanges를 호출하면 편집이 종료되고 Current 및 Proposed 행 버전이 삭제됩니다. AcceptChanges 또는 RejectChanges를 호출한 후에 EndEdit 또는 CancelEdit을 호출하는 경우에는 편집이 이미 종료된 상태이므로 아무런 영향을 주지 않습니다.
다음 예제에서는 EndEdit 및 CancelEdit과 함께 BeginEdit을 사용하는 방법을 보여 줍니다. 이 예제에서는 또한 ColumnChanged 이벤트에서 ProposedValue를 검사하고 편집 취소 여부를 결정합니다.
Dim workTable As DataTable = New DataTable
workTable.Columns.Add("LastName", Type.GetType("System.String"))
AddHandler workTable.ColumnChanged, _
New DataColumnChangeEventHandler(AddressOf OnColumnChanged)
Dim workRow As DataRow = workTable.NewRow()
workRow(0) = "Smith"
workTable.Rows.Add(workRow)
workRow.BeginEdit()
' Causes the ColumnChanged event to write a message and cancel the edit.
workRow(0) = ""
workRow.EndEdit()
' Displays "Smith, New".
Console.WriteLine("{0}, {1}", workRow(0), workRow.RowState)
Private Shared Sub OnColumnChanged( _
sender As Object, args As DataColumnChangeEventArgs)
If args.Column.ColumnName = "LastName" Then
If args.ProposedValue.ToString() = "" Then
Console.WriteLine("Last Name cannot be blank. Edit canceled.")
args.Row.CancelEdit()
End If
End If
End Sub
DataTable workTable = new DataTable();
workTable.Columns.Add("LastName", typeof(String));
workTable.ColumnChanged +=
new DataColumnChangeEventHandler(OnColumnChanged);
DataRow workRow = workTable.NewRow();
workRow[0] = "Smith";
workTable.Rows.Add(workRow);
workRow.BeginEdit();
// Causes the ColumnChanged event to write a message and cancel the edit.
workRow[0] = "";
workRow.EndEdit();
// Displays "Smith, New".
Console.WriteLine("{0}, {1}", workRow[0], workRow.RowState);
protected static void OnColumnChanged(
Object sender, DataColumnChangeEventArgs args)
{
if (args.Column.ColumnName == "LastName")
if (args.ProposedValue.ToString() == "")
{
Console.WriteLine("Last Name cannot be blank. Edit canceled.");
args.Row.CancelEdit();
}
}