Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das DataTable Objekt stellt eine Reihe von Ereignissen bereit, die von einer Anwendung verarbeitet werden können. Eine Beschreibung dieser DataTable-Ereignisse finden Sie in der folgenden Tabelle:
| Ereignis | BESCHREIBUNG |
|---|---|
| Initialized | Tritt ein, nachdem die EndInit-Methode einer DataTable aufgerufen wurde. Dieses Ereignis soll in erster Linie Entwurfszeitszenarien unterstützen. |
| ColumnChanged | Tritt auf, nachdem ein Wert erfolgreich in einem DataColumn geändert wurde. |
| ColumnChanging | Tritt auf, wenn ein Wert für ein DataColumn übermittelt wurde. |
| RowChanged | Tritt auf, nachdem ein DataColumn Wert oder der RowState eines DataRow im DataTable erfolgreich geändert wurde. |
| RowChanging | Tritt ein, wenn eine Änderung für einen DataColumn-Wert oder für den RowState einer DataRow in der DataTable übermittelt wurde. |
| RowDeleted | Tritt ein, nachdem eine DataRow in der DataTable als Deleted gekennzeichnet wurde. |
| RowDeleting | Tritt auf, bevor eine DataRow in der DataTable-Datei als Deleted gekennzeichnet ist. |
| TableCleared | Tritt auf, nachdem ein Aufruf der Clear Methode von DataTable erfolgreich jeden DataRow gelöscht hat. |
| TableClearing | Tritt auf, nachdem die Clear Methode aufgerufen wird, aber bevor der Clear Vorgang beginnt. |
| TableNewRow | Tritt auf, nachdem ein neuer DataRow durch einen Aufruf der NewRow-Methode der DataTable erstellt wurde. |
| Disposed | Tritt auf, wenn DataTableDisposed ist. Wird von MarshalByValueComponent geerbt. |
Hinweis
Die meisten Vorgänge, die Zeilen hinzufügen oder löschen, lösen die Ereignisse ColumnChanged und ColumnChanging nicht aus. Die ReadXml-Methode löst jedoch weiterhin das ColumnChanged-Ereignis und das ColumnChanging-Ereignis aus, bis XmlReadMode auf DiffGram oder auf Auto festgelegt ist, wenn das gelesene XML-Dokument ein DiffGram ist.
Warnung
Datenbeschädigung kann auftreten, wenn Daten in einem DataSet Ereignis geändert werden, aus dem das RowChanged Ereignis ausgelöst wird. Es wird keine Ausnahme ausgelöst, wenn eine solche Datenbeschädigung auftritt.
Weitere verwandte Ereignisse
Die Constraints Eigenschaft enthält eine ConstraintCollection Instanz. Die ConstraintCollection Klasse macht ein CollectionChanged Ereignis verfügbar. Dieses Ereignis wird ausgelöst, wenn eine Einschränkung zum ConstraintCollection hinzugefügt, geändert oder davon entfernt wird.
Die Columns Eigenschaft enthält eine DataColumnCollection Instanz. Die DataColumnCollection Klasse macht ein CollectionChanged Ereignis verfügbar. Dieses Ereignis wird ausgelöst, wenn ein DataColumn hinzugefügt, geändert oder aus DataColumnCollection entfernt wird. Zu den Änderungen, die das Ereignis auslösen, gehören Änderungen des Namens, des Typs, des Ausdrucks oder der Ordinalposition einer Spalte.
Die Tables-Eigenschaft eines DataSet enthält eine DataTableCollection-Instanz. Die DataTableCollection Klasse macht sowohl ein CollectionChanged als auch ein CollectionChanging Ereignis verfügbar. Diese Ereignisse werden ausgelöst, wenn ein DataTable Element hinzugefügt oder ein DataSet Element daraus entfernt wird.
Änderungen an DataRows können auch Ereignisse für ein zugeordnetes DataView auslösen. Die DataView Klasse macht ein ListChanged Ereignis verfügbar, das ausgelöst wird, wenn sich ein DataColumn Wert ändert oder wenn sich die Komposition oder Sortierreihenfolge der Ansicht ändert. Die DataRowView Klasse macht ein PropertyChanged Ereignis verfügbar, das ausgelöst wird, wenn sich ein zugeordneter DataColumn Wert ändert.
Abfolge von Vorgängen
Dies ist die Abfolge von Vorgängen, die auftreten, wenn ein DataRow Element hinzugefügt, geändert oder gelöscht wird:
Erstellen Sie den vorgeschlagenen Datensatz, und wenden Sie alle Änderungen an.
Die Einschränkungen für Nicht-Ausdruck-Spalten werden überprüft.
Das
RowChanging-Ereignis oder dasRowDeleting-Ereignis wird ausgelöst.Setzen Sie den vorgeschlagenen Eintrag als aktuellen Eintrag fest.
Aktualisieren Sie alle zugeordneten Indizes.
Auslösen von
ListChangedEreignissen für zugeordneteDataViewObjekte undPropertyChangedEreignisse für zugeordneteDataRowViewObjekte.Alle Ausdrucksspalten werden ausgewertet, wobei aber die Überprüfung der Einschränkungen für diese Spalten verzögert wird.
Die
ListChanged-Ereignisse für die zugeordnetenDataView-Objekte und diePropertyChanged-Ereignisse für die zugeordnetenDataRowView-Objekte, auf die sich die Auswertung der Ausdrucksspalten auswirkt, werden ausgelöst.Das
RowChanged-Ereignis oder dasRowDeleted-Ereignis wird ausgelöst.Die Einschränkungen für Ausdrucksspalten werden überprüft.
Hinweis
Änderungen an Ausdrucksspalten führen nie dazu, dass DataTable-Ereignisse ausgelöst werden. Änderungen an Ausdrucksspalten lösen nur die Ereignisse DataView und DataRowView aus. Ausdrucksspalten können Abhängigkeiten von mehreren anderen Spalten aufweisen und während eines einzelnen DataRow Vorgangs mehrmals ausgewertet werden. Jede Ausdrucksauswertung löst Ereignisse aus, und ein einzelner DataRow-Vorgang kann mehrere ListChanged- und PropertyChanged-Ereignisse auslösen, wenn Ausdrucksspalten betroffen sind, möglicherweise einschließlich mehrerer Ereignisse für dieselbe Ausdrucksspalte.
Warnung
Lösen Sie keine NullReferenceException im RowChanged-Ereignishandler aus. Wenn eine NullReferenceException im RowChanged-Ereignis einer DataTable ausgelöst wird, führt dies zur Beschädigung der DataTable.
Beispiel
Im folgenden Beispiel wird veranschaulicht, wie Ereignishandler für die Ereignisse RowChanged, RowChanging, RowDeleted, RowDeleting, ColumnChanged, ColumnChanging, TableNewRow, TableCleared und TableClearing erstellt werden. Jeder Ereignishandler zeigt die Ausgabe beim Auslösen der Ereignisse im Konsolenfenster an.
static void DataTableEvents()
{
DataTable table = new("Customers");
// Add two columns, id and name.
table.Columns.Add("id", typeof(int));
table.Columns.Add("name", typeof(string));
// Set the primary key.
table.Columns["id"].Unique = true;
table.PrimaryKey = [table.Columns["id"]];
// Add a RowChanged event handler.
table.RowChanged += Row_Changed;
// Add a RowChanging event handler.
table.RowChanging += Row_Changing;
// Add a RowDeleted event handler.
table.RowDeleted += Row_Deleted;
// Add a RowDeleting event handler.
table.RowDeleting += Row_Deleting;
// Add a ColumnChanged event handler.
table.ColumnChanged += Column_Changed;
// Add a ColumnChanging event handler.
table.ColumnChanging += Column_Changing;
// Add a TableNewRow event handler.
table.TableNewRow += Table_NewRow;
// Add a TableCleared event handler.
table.TableCleared += Table_Cleared;
// Add a TableClearing event handler.
table.TableClearing += Table_Clearing;
// Add a customer.
DataRow row = table.NewRow();
row["id"] = 1;
row["name"] = "Customer1";
table.Rows.Add(row);
table.AcceptChanges();
// Change the customer name.
table.Rows[0]["name"] = "ChangedCustomer1";
// Delete the row.
table.Rows[0].Delete();
// Clear the table.
table.Clear();
}
static void Row_Changed(object sender, DataRowChangeEventArgs e) =>
Console.WriteLine($"Row_Changed Event: name={e.Row["name"]}; action={e.Action}");
static void Row_Changing(object sender, DataRowChangeEventArgs e) =>
Console.WriteLine($"Row_Changing Event: name={e.Row["name"]}; action={e.Action}");
static void Row_Deleted(object sender, DataRowChangeEventArgs e) =>
Console.WriteLine($"Row_Deleted Event: name={e.Row["name", DataRowVersion.Original]}; action={e.Action}");
static void Row_Deleting(object sender,
DataRowChangeEventArgs e) =>
Console.WriteLine($"Row_Deleting Event: name={e.Row["name"]}; action={e.Action}");
static void Column_Changed(object sender, DataColumnChangeEventArgs e) =>
Console.WriteLine($"Column_Changed Event: ColumnName={e.Column.ColumnName}; RowState={e.Row.RowState}");
static void Column_Changing(object sender, DataColumnChangeEventArgs e) =>
Console.WriteLine($"Column_Changing Event: ColumnName={e.Column.ColumnName}; RowState={e.Row.RowState}");
static void Table_NewRow(object sender,
DataTableNewRowEventArgs e) =>
Console.WriteLine($"Table_NewRow Event: RowState={e.Row.RowState.ToString()}");
static void Table_Cleared(object sender, DataTableClearEventArgs e) =>
Console.WriteLine("Table_Cleared Event: TableName={0}; Rows={1}",
e.TableName, e.Table.Rows.Count.ToString());
static void Table_Clearing(object sender, DataTableClearEventArgs e) =>
Console.WriteLine("Table_Clearing Event: TableName={0}; Rows={1}",
e.TableName, e.Table.Rows.Count.ToString());
Private Sub DataTableEvents()
Dim table As New DataTable("Customers")
' Add two columns, id and name.
table.Columns.Add("id", Type.GetType("System.Int32"))
table.Columns.Add("name", Type.GetType("System.String"))
' Set the primary key.
table.Columns("id").Unique = True
table.PrimaryKey = New DataColumn() {table.Columns("id")}
' Add a RowChanged event handler.
AddHandler table.RowChanged, _
New DataRowChangeEventHandler(AddressOf Row_Changed)
' Add a RowChanging event handler.
AddHandler table.RowChanging, _
New DataRowChangeEventHandler(AddressOf Row_Changing)
' Add a RowDeleted event handler.
AddHandler table.RowDeleted, New _
DataRowChangeEventHandler(AddressOf Row_Deleted)
' Add a RowDeleting event handler.
AddHandler table.RowDeleting, New _
DataRowChangeEventHandler(AddressOf Row_Deleting)
' Add a ColumnChanged event handler.
AddHandler table.ColumnChanged, _
New DataColumnChangeEventHandler(AddressOf Column_Changed)
' Add a ColumnChanging event handler for the table.
AddHandler table.ColumnChanging, New _
DataColumnChangeEventHandler(AddressOf Column_Changing)
' Add a TableNewRow event handler.
AddHandler table.TableNewRow, New _
DataTableNewRowEventHandler(AddressOf Table_NewRow)
' Add a TableCleared event handler.
AddHandler table.TableCleared, New _
DataTableClearEventHandler(AddressOf Table_Cleared)
' Add a TableClearing event handler.
AddHandler table.TableClearing, New _
DataTableClearEventHandler(AddressOf Table_Clearing)
' Add a customer.
Dim row As DataRow = table.NewRow()
row("id") = 1
row("name") = "Customer1"
table.Rows.Add(row)
table.AcceptChanges()
' Change the customer name.
table.Rows(0).Item("name") = "ChangedCustomer1"
' Delete the row.
table.Rows(0).Delete()
' Clear the table.
table.Clear()
End Sub
Private Sub Row_Changed(ByVal sender As Object, _
ByVal e As DataRowChangeEventArgs)
Console.WriteLine("Row_Changed Event: name={0}; action={1}", _
e.Row("name"), e.Action)
End Sub
Private Sub Row_Changing(ByVal sender As Object, _
ByVal e As DataRowChangeEventArgs)
Console.WriteLine("Row_Changing Event: name={0}; action={1}", _
e.Row("name"), e.Action)
End Sub
Private Sub Row_Deleted(ByVal sender As Object, _
ByVal e As DataRowChangeEventArgs)
Console.WriteLine("Row_Deleted Event: name={0}; action={1}", _
e.Row("name", DataRowVersion.Original), e.Action)
End Sub
Private Sub Row_Deleting(ByVal sender As Object, _
ByVal e As DataRowChangeEventArgs)
Console.WriteLine("Row_Deleting Event: name={0}; action={1}", _
e.Row("name"), e.Action)
End Sub
Private Sub Column_Changed(ByVal sender As Object, _
ByVal e As DataColumnChangeEventArgs)
Console.WriteLine("Column_Changed Event: ColumnName={0}; RowState={1}", _
e.Column.ColumnName, e.Row.RowState)
End Sub
Private Sub Column_Changing(ByVal sender As Object, _
ByVal e As DataColumnChangeEventArgs)
Console.WriteLine("Column_Changing Event: ColumnName={0}; RowState={1}", _
e.Column.ColumnName, e.Row.RowState)
End Sub
Private Sub Table_NewRow(ByVal sender As Object, _
ByVal e As DataTableNewRowEventArgs)
Console.WriteLine("Table_NewRow Event: RowState={0}", _
e.Row.RowState.ToString())
End Sub
Private Sub Table_Cleared(ByVal sender As Object, _
ByVal e As DataTableClearEventArgs)
Console.WriteLine("Table_Cleared Event: TableName={0}; Rows={1}", _
e.TableName, e.Table.Rows.Count.ToString())
End Sub
Private Sub Table_Clearing(ByVal sender As Object, _
ByVal e As DataTableClearEventArgs)
Console.WriteLine("Table_Clearing Event: TableName={0}; Rows={1}", _
e.TableName, e.Table.Rows.Count.ToString())
End Sub