Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Objek DataTable menyediakan serangkaian peristiwa yang dapat diproses oleh aplikasi. Tabel berikut ini menjelaskan peristiwa DataTable
.
Peristiwa | Deskripsi |
---|---|
Initialized | Terjadi setelah metode EndInit dari DataTable dipanggil. Acara ini ditujukan terutama untuk mendukung skenario pada saat perancangan. |
ColumnChanged | Terjadi setelah nilai berhasil diubah dalam DataColumn. |
ColumnChanging | Terjadi ketika nilai telah dikirimkan untuk DataColumn . |
RowChanged | Terjadi setelah nilai DataColumn atau RowState dari sebuah DataRow dalam DataTable berhasil diubah. |
RowChanging | Terjadi ketika perubahan telah dikirimkan untuk nilai DataColumn atau RowState DataRow di DataTable . |
RowDeleted | Terjadi setelah DataRow di DataTable telah ditandai sebagai Deleted . |
RowDeleting | Terjadi sebelum DataRow dalam DataTable ditandai sebagai Deleted . |
TableCleared | Terjadi setelah panggilan ke metode ClearDataTable telah berhasil menghapus setiap DataRow . |
TableClearing | Terjadi setelah metode Clear dipanggil tetapi sebelum operasi Clear dimulai. |
TableNewRow | Terjadi setelah sebuah DataRow baru dibuat oleh panggilan ke metode NewRow dari DataTable . |
Disposed | Terjadi ketika DataTable adalah Disposed . Diwarisi dari MarshalByValueComponent. |
Nota
Sebagian besar operasi yang menambahkan atau menghapus baris tidak menaikkan peristiwa ColumnChanged
dan ColumnChanging
. Namun, metode ReadXml
memang memicu kejadian ColumnChanged
dan ColumnChanging
, kecuali XmlReadMode
diatur ke DiffGram
atau diatur ke Auto
saat dokumen XML yang dibaca adalah DiffGram
.
Peringatan
Kerusakan data dapat terjadi jika data dimodifikasi pada DataSet
tempat peristiwa RowChanged
dipicu. Tidak ada pengecualian yang akan dimunculkan jika kerusakan data tersebut terjadi.
Peristiwa Terkait Tambahan
Properti Constraints menyimpan instans ConstraintCollection. Kelas ConstraintCollection mengekspos peristiwa CollectionChanged. Peristiwa ini dipicu ketika batasan ditambahkan, dimodifikasi, atau dihapus dari ConstraintCollection
.
Properti Columns menyimpan instans DataColumnCollection. Kelas DataColumnCollection
mengekspos peristiwa CollectionChanged. Peristiwa ini terpicu ketika DataColumn
ditambahkan, dimodifikasi, atau dihapus dari DataColumnCollection
. Modifikasi yang menyebabkan event diaktifkan mencakup perubahan pada nama, jenis, ekspresi, atau posisi urutan kolom.
Properti Tables pada DataSet memiliki instans DataTableCollection. Kelas DataTableCollection
mengekspos baik peristiwa CollectionChanged
maupun peristiwa CollectionChanging
. Peristiwa ini terjadi ketika DataTable
ditambahkan ke atau dihapus dari DataSet
.
Perubahan pada DataRows
juga dapat memicu kejadian untuk DataViewyang terkait. Kelas DataView
mengekspos peristiwa ListChanged yang diaktifkan saat nilai DataColumn
berubah atau saat komposisi atau urutan pengurutan tampilan berubah. Kelas DataRowView menyediakan peristiwa PropertyChanged yang diaktifkan saat nilai DataColumn
terkait berubah.
Urutan Operasi
Berikut adalah urutan operasi yang terjadi ketika DataRow
ditambahkan, dimodifikasi, atau dihapus:
Buat catatan yang diusulkan dan terapkan perubahan apa pun.
Periksa batasan untuk kolom yang bukan ekspresi.
Naikkan peristiwa
RowChanging
atauRowDeleting
sebagaimana berlaku.Atur catatan yang diusulkan menjadi catatan saat ini.
Perbarui indeks terkait.
Ajukan peristiwa
ListChanged
untuk objekDataView
terkait dan peristiwaPropertyChanged
untuk objekDataRowView
terkait.Evaluasi semua kolom ekspresi, tetapi tunda memeriksa batasan apa pun pada kolom ini.
Naikkan peristiwa
ListChanged
untuk objekDataView
terkait dan peristiwaPropertyChanged
untuk objekDataRowView
terkait yang terpengaruh oleh evaluasi kolom ekspresi.Munculkan peristiwa
RowChanged
atauRowDeleted
sebagaimana berlaku.Periksa batasan pada kolom ekspresi.
Nota
Perubahan pada kolom ekspresi tidak pernah memicu peristiwa DataTable
. Perubahan pada kolom ekspresi hanya menaikkan peristiwa DataView
dan DataRowView
. Kolom ekspresi bisa bergantung pada beberapa kolom lain, dan dapat dievaluasi beberapa kali selama satu operasi DataRow
. Setiap evaluasi ekspresi menghasilkan peristiwa, dan satu operasi DataRow
dapat menghasilkan beberapa peristiwa ListChanged
dan PropertyChanged
ketika kolom ekspresi terpengaruh, mungkin termasuk beberapa peristiwa untuk kolom ekspresi yang sama.
Peringatan
Jangan melemparkan NullReferenceException dalam penanganan aktivitas RowChanged
. Jika NullReferenceException dilemparkan dalam event RowChanged
dari DataTable
, maka DataTable
akan mengalami kerusakan.
Contoh
Contoh berikut menunjukkan cara membuat penanganan aktivitas untuk peristiwa RowChanged
, RowChanging
, RowDeleted
, RowDeleting
, ColumnChanged
, ColumnChanging
, TableNewRow
, TableCleared
, dan TableClearing
. Setiap penanganan aktivitas menampilkan output di jendela konsol saat diaktifkan.
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
Lihat juga
- Memanipulasi Data dalam DataTable
- Menangani Kejadian DataAdapter
- Menangani Peristiwa Himpunan Data
- Gambaran Umum ADO.NET