DataTable-események kezelése
Az DataTable objektum egy alkalmazás által feldolgozható eseménysorozatot biztosít. Az alábbi táblázat az eseményeket ismerteti DataTable
.
Esemény | Leírás |
---|---|
Initialized | A metódus meghívása DataTable után EndInit következik be. Ez az esemény elsősorban a tervezési idejű forgatókönyvek támogatására szolgál. |
ColumnChanged | Egy érték sikeres módosítása után következik be.DataColumn |
ColumnChanging | Akkor fordul elő, ha egy érték elküldve lett egy DataColumn . |
RowChanged | Az érték vagy a RowState benne lévő DataTable értékek DataRow sikeres módosítása után DataColumn következik be. |
RowChanging | Akkor fordul elő, ha módosítást küldtek el egy DataColumn értékre vagy egy DataRow értékre vonatkozóan RowState a DataTable . |
RowDeleted | A azt követően következik be, hogy a DataRow fájlban a rendszer a következőként van megjelölve: .<DataTable > |
RowDeleting | A jelölés előtt DataRow következik be.DataTable Deleted |
TableCleared | A metódus meghívása Clear után történik, amely sikeresen törölte az DataTable összes DataRow . |
TableClearing | A metódus meghívása Clear után, de a Clear művelet megkezdése előtt következik be. |
TableNewRow | Akkor fordul elő, ha a metódus metódusára irányuló hívás NewRow DataTable létrehoz egy újatDataRow . |
Disposed | Akkor fordul elő, ha az DataTable .Disposed Öröklődve innen MarshalByValueComponent: . |
Feljegyzés
A sorok hozzáadására vagy törlésére vonatkozó legtöbb művelet nem emeli ki az eseményeket és ColumnChanging
az ColumnChanged
eseményeket. A ReadXml
metódus azonban nem hoz létre ColumnChanged
és ColumnChanging
eseményeket, kivéve, ha az DiffGram
XmlReadMode
olvasás DiffGram
alatt álló XML-dokumentum értéke vagy beállítása Auto
.
Figyelmeztetés
Adatsérülés akkor fordulhat elő, ha olyan adat módosul DataSet
, amelyből az RowChanged
esemény keletkezik. Ilyen adatsérülés esetén a rendszer nem emel kivételt.
További kapcsolódó események
A Constraints tulajdonság tartalmaz egy példányt ConstraintCollection . Az ConstraintCollection osztály egy eseményt CollectionChanged tesz közzé. Ez az esemény akkor aktiválódik, ha kényszert adnak hozzá, módosítanak vagy eltávolítanak a ConstraintCollection
rendszerből.
A Columns tulajdonság tartalmaz egy példányt DataColumnCollection . Az DataColumnCollection
osztály egy eseményt CollectionChanged tesz közzé. Ez az esemény akkor aktiválódik, amikor hozzáadnak, DataColumn
módosítanak vagy eltávolítanak egy elemet a DataColumnCollection
programból. Az eseményt kiváltó módosítások közé tartozik az oszlop nevének, típusának, kifejezésének vagy sorszámának módosítása.
Egy Tables példány tulajdonsága DataSet tartalmaz egy példányt DataTableCollection . Az DataTableCollection
osztály egy és egy eseményt CollectionChanging
is CollectionChanged
elérhetővé tesz. Ezek az események akkor aktiválódik, ha a rendszer hozzáad vagy DataTable
eltávolít egy elemet a DataSet
programból.
DataRows
A módosítások eseményt is kiválthatnak egy társított DataVieweseményhez. Az DataView
osztály egy olyan eseményt ListChanged tesz közzé, amely akkor aktiválódik, amikor egy DataColumn
érték megváltozik, vagy amikor a nézet összetétele vagy rendezési sorrendje megváltozik. Az DataRowView osztály egy eseményt PropertyChanged tesz közzé, amely egy társított DataColumn
érték változásakor aktiválódik.
Műveletek sorrendje
Íme a műveletek sorozata, amelyek a DataRow
hozzáadás, a módosítás vagy a törlés során következnek be:
Hozza létre a javasolt rekordot, és alkalmazza a módosításokat.
Ellenőrizze a nem kifejezésoszlopokra vonatkozó korlátozásokat.
Szükség szerint emelje fel az
RowChanging
eseményeket vagyRowDeleting
eseményeket.Állítsa be a javasolt rekordot az aktuális rekordra.
Frissítse a társított indexeket.
Események létrehozása
ListChanged
a társítottDataView
objektumokhoz ésPropertyChanged
eseményekhez a társítottDataRowView
objektumokhoz.Értékelje ki az összes kifejezésoszlopot, de késleltetje az oszlopokra vonatkozó korlátozások ellenőrzését.
Eseményeket hozhat létre
ListChanged
a kifejezésoszlopok kiértékelése által érintett társítottDataView
DataRowView
objektumokhoz ésPropertyChanged
eseményekhez.Igény szerint emelhet
RowChanged
vagyRowDeleted
eseményeket is.Ellenőrizze a kifejezésoszlopokra vonatkozó korlátozásokat.
Feljegyzés
A kifejezésoszlopok módosításai soha nem emelnek DataTable
eseményeket. A kifejezésoszlopok módosításai csak emelnek és DataRowView
eseményeket tartalmaznakDataView
. A kifejezésoszlopok több más oszloptól is függhetnek, és egyetlen DataRow
művelet során többször is kiértékelhetők. Minden kifejezés kiértékelése eseményeket hoz létre, és egyetlen DataRow
művelet több és PropertyChanged
eseményt ListChanged
is létrehozhat, ha a kifejezésoszlopok érintettek, akár több eseményt is ugyanabban a kifejezésoszlopban.
Figyelmeztetés
Ne dobja az NullReferenceExceptionRowChanged
eseménykezelőbe. Ha a rendszer egy NullReferenceException eseményen DataTable
belül RowChanged
dob egy elemet, akkor a DataTable
rendszer megsérül.
Példa
Az alábbi példa bemutatja, hogyan hozhat létre eseménykezelőket a RowChanged
, RowChanging
, , RowDeleted
, ColumnChanged
RowDeleting
, ColumnChanging
, TableNewRow
TableCleared
, és TableClearing
eseményekhez. Minden eseménykezelő megjeleníti a kimenetet a konzolablakban, amikor aktiválódik.
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 = new DataColumn[] { 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={0}; action={1}",
e.Row["name"], e.Action);
static void Row_Changing(object sender, DataRowChangeEventArgs e) =>
Console.WriteLine("Row_Changing Event: name={0}; action={1}",
e.Row["name"], e.Action);
static void Row_Deleted(object sender, DataRowChangeEventArgs e) =>
Console.WriteLine("Row_Deleted Event: name={0}; action={1}",
e.Row["name", DataRowVersion.Original], e.Action);
static void Row_Deleting(object sender,
DataRowChangeEventArgs e) =>
Console.WriteLine("Row_Deleting Event: name={0}; action={1}",
e.Row["name"], e.Action);
static void Column_Changed(object sender, DataColumnChangeEventArgs e) =>
Console.WriteLine("Column_Changed Event: ColumnName={0}; RowState={1}",
e.Column.ColumnName, e.Row.RowState);
static void Column_Changing(object sender, DataColumnChangeEventArgs e) =>
Console.WriteLine("Column_Changing Event: ColumnName={0}; RowState={1}",
e.Column.ColumnName, e.Row.RowState);
static void Table_NewRow(object sender,
DataTableNewRowEventArgs e) =>
Console.WriteLine("Table_NewRow Event: RowState={0}",
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