DataRow.BeginEdit Метод
Определение
public:
void BeginEdit();
public void BeginEdit ();
member this.BeginEdit : unit -> unit
Public Sub BeginEdit ()
Исключения
Метод был вызван внутри события RowChanging.The method was called inside the RowChanging event.
Метод был вызван в удаленную строку.The method was called upon a deleted row.
Примеры
В примере создается простой DataTable с одним DataColumn и пятью DataRow объектами, а также UniqueConstraint .The example creates a simple DataTable with one DataColumn and five DataRow objects, and a UniqueConstraint. RowChangedДля наблюдения за изменением значения строки также добавляется обработчик событий.A RowChanged event handler is also added to monitor when the row's value is changing. После вызова BeginEdit для существующих строк ограничение и событие временно отключаются, и выводятся исходные и предложенные значения.After invoking BeginEdit on the existing rows, the constraint and event are temporarily disabled and the original and proposed values are printed. BeginEditСнова вызывается, чтобы установить одно и то же значение для двух строк.The BeginEdit is again invoked to set two rows to the same value. При EndEdit вызове метода метод UniqueConstraint применяется к идентичным значениям.When EndEdit is called, the UniqueConstraint is enforced on the identical values.
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]);
}
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
Комментарии
Используйте BeginEdit метод, чтобы перевести в DataRow режим редактирования.Use the BeginEdit method to put a DataRow into edit mode. В этом режиме события временно приостанавливаются, что позволяет пользователю вносить изменения в более чем одну строку, не запуская правила проверки.In this mode, events are temporarily suspended, letting the user make changes to more than one row without triggering validation rules. Например, если необходимо убедиться, что значение столбца для общего количества равно значениям столбцов дебет и кредит в строке, можно перевести каждую строку в режим редактирования, чтобы приостановить проверку значений строк до тех пор, пока пользователь не попытается зафиксировать значения.For example, if you must make sure that the value of the column for a total amount is equal to the values for the debit and credit columns in a row, you can put each row into edit mode to suspend the validation of the row values until the user tries to commit the values.
BeginEditМетод вызывается неявно, когда пользователь изменяет значение элемента управления с привязкой к данным; EndEdit метод вызывается неявно при вызове AcceptChanges метода для DataTable объекта.The BeginEdit method is called implicitly when the user changes the value of a data-bound control; the EndEdit method is called implicitly when you invoke the AcceptChanges method for the DataTable object. В этом режиме редактирования DataRow сохраняет представления исходного и нового предложенных значений.While in this edit mode, the DataRow stores representations of the original and new proposed values. Таким образом, если EndEdit метод не был вызван, можно получить исходную или предложенную версию, передав либо параметр, либо DataRowVersion.Original
DataRowVersion.Proposed
для version
параметра Item[] Свойства.Therefore, as long as the EndEdit method has not been called, you can retrieve either the original or proposed version by passing either DataRowVersion.Original
or DataRowVersion.Proposed
for the version
parameter of the Item[] property. Вы также можете отменить все изменения на этом этапе, вызвав CancelEdit метод.You can also cancel any edits at this point by invoking the CancelEdit method.
Чтобы проверить, содержит ли строка исходное или предложенное значение, вызовите HasVersion метод.To see if the row contains an original or proposed value, call the HasVersion method.
Примечание
BeginEditМетод временно приостанавливает RowChanging события, но операция не delete
выполняется.The BeginEdit method temporarily suspends RowChanging events, but the delete
operation does not.