DataRow.BeginEdit Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Spustí operaci úprav objektu DataRow .
public:
void BeginEdit();
public void BeginEdit();
member this.BeginEdit : unit -> unit
Public Sub BeginEdit ()
Výjimky
Metoda byla volána uvnitř RowChanging události.
Metoda byla volána na odstraněný řádek.
Příklady
Příklad vytvoří jednoduchý DataTable s jedním DataColumn a pěti DataRow objekty a a UniqueConstraint. Obslužná rutina RowChanged události se také přidá k monitorování při změně hodnoty řádku. Po vyvolání BeginEdit existujících řádků se omezení a událost dočasně zakáže a zobrazí se původní a navrhované hodnoty. Znovu BeginEdit se vyvolá a nastaví dva řádky na stejnou hodnotu. Při EndEdit zavolání UniqueConstraint se vynucuje u identických hodnot.
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
Poznámky
Použijte metodu BeginEditDataRow k vložení do režimu úprav. V tomto režimu jsou události dočasně pozastaveny a umožňují uživateli provádět změny ve více než jednom řádku bez aktivace ověřovacích pravidel. Pokud například musíte zajistit, aby se hodnota sloupce pro celkovou částku rovnala hodnotám debetních a kreditních sloupců v řádku, můžete každý řádek vložit do režimu úprav a pozastavit ověřování hodnot řádků, dokud se uživatel pokusí potvrdit hodnoty.
Metoda BeginEdit se volá implicitně, když uživatel změní hodnotu ovládacího prvku vázaného na data; EndEdit metoda se volá implicitně při vyvolání AcceptChanges metody pro DataTable objekt. V tomto režimu DataRow úprav ukládá reprezentace původních a nových navrhovaných hodnot.
EndEdit Pokud tedy metoda nebyla volána, můžete načíst původní nebo navrženou verzi předáním parametru DataRowVersion.OriginalDataRowVersion.Proposed vlastnosti nebo version pro Item[] parametr vlastnosti. Všechny úpravy můžete v tuto chvíli také zrušit vyvoláním CancelEdit metody.
Pokud chcete zjistit, jestli řádek obsahuje původní nebo navrženou hodnotu, zavolejte metodu HasVersion .
Note
Metoda BeginEdit dočasně pozastaví RowChanging události, ale delete operace ne.