DataTable rất phức tạp . Nó cung cấp nhiều phương thức, thuộc tính và sự kiện. Xử lý sự kiện của DataTable giúp chúng ta phát hiện khi một cái gì đó thay đổi trong một DataTable.
Trong ví dụ này, tôi xin trình bày cách phát hiện và thông báo khi phát sinh sự kiện cập nhật dữ liệu (Thêm, xóa dòng hoặc Update 1 ô dữ liệu) trong 1 DataTable trong C#.
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main() { DataTable table = new DataTable("PatientTable"); // ... Cột ID là khóa chính. table.Columns.Add("Id", typeof(int)); table.Columns["Id"].Unique = true; table.Columns.Add("Dosage", typeof(int)); table.Columns.Add("Drug", typeof(string)); table.Columns.Add("Patient", typeof(string)); // ... Khởi 5 dòng. table.Rows.Add(1, 25, "Evista", "Lundberg"); table.Rows.Add(2, 50, "Adcirca", "Jeffries"); table.Rows.Add(3, 10, "Glucagon", "Johnson"); table.Rows.Add(4, 20, "Amyvid", "Skinner"); table.Rows.Add(5, 80, "Alimta", "Nguyen"); table.AcceptChanges(); // Add a RowChanged event handler. table.RowChanged += new DataRowChangeEventHandler(Row_Changed); // Add a RowChanging event handler. table.RowChanging += new DataRowChangeEventHandler(Row_Changing); // Add a RowDeleted event handler. table.RowDeleted += new DataRowChangeEventHandler(Row_Deleted); // Add a RowDeleting event handler. table.RowDeleting += new DataRowChangeEventHandler(Row_Deleting); // Add a ColumnChanged event handler. table.ColumnChanged += new DataColumnChangeEventHandler(Column_Changed); // Add a ColumnChanging event handler. table.ColumnChanging += new DataColumnChangeEventHandler(Column_Changing); // Add a TableNewRow event handler. table.TableNewRow += new DataTableNewRowEventHandler(Table_NewRow); // Add a TableCleared event handler. table.TableCleared += new DataTableClearEventHandler(Table_Cleared); // Add a TableClearing event handler. table.TableClearing += new DataTableClearEventHandler(Table_Clearing); // ... Change a row. table.Rows[0][1] = 55; table.Rows[1][1] = 800; // Thêm dòng table.Rows.Add(6, 55, "Duc", "Nguyen"); //Đổi tên cột table.Columns["Dosage"].ColumnName = "NewColumnName"; table.AcceptChanges(); //Cell Dòng 0, Cột 1 không thay đổi giá trị vì đã bị RejectChanges Console.WriteLine("Dòng 1: "+ table.Rows[0][1].ToString()); // Xóa dòng row. table.Rows[0].Delete(); //Xóa hết dữ liệu của bảng table.Rows.Clear(); Console.ReadLine(); } private static void Row_Changed(object sender, DataRowChangeEventArgs e) { if (e.Action == DataRowAction.Change) { if (e.Row[1].ToString() == "55") { e.Row.Table.RejectChanges(); } } Console.WriteLine("Row_Changed Event: action={0} ; State = {1}", e.Action, e.Row.RowState); } private static void Row_Changing(object sender, DataRowChangeEventArgs e) { Console.WriteLine("Row_Changing Event: action={0} ; State = {1}", e.Action, e.Row.RowState); } private static void Row_Deleted(object sender, DataRowChangeEventArgs e) { Console.WriteLine("Row_Deleted Event: action={0} ; State = {1}", e.Action, e.Row.RowState); } private static void Row_Deleting(object sender, DataRowChangeEventArgs e) { Console.WriteLine("Row_Deleting Event: action={0} ; State = {1}", e.Action, e.Row.RowState); } private static void Column_Changed(object sender, DataColumnChangeEventArgs e) { Console.WriteLine("Column_Changed Event: State = {0}; ColumnName={1};" , e.Row.RowState, e.Column.ColumnName); } private static void Column_Changing(object sender, DataColumnChangeEventArgs e) { Console.WriteLine("Column_Changing Event: State = {0}; ColumnName={1};" , e.Row.RowState, e.Column.ColumnName); } private static void Table_NewRow(object sender, DataTableNewRowEventArgs e) { Console.WriteLine("Table_NewRow Event: State = {0}", e.Row.RowState); } private static void Table_Cleared(object sender, DataTableClearEventArgs e) { Console.WriteLine("Table_Cleared Event: TableName={0}; Rows={1}", e.TableName, e.Table.Rows.Count.ToString()); } private static void Table_Clearing(object sender, DataTableClearEventArgs e) { Console.WriteLine("Table_Clearing Event: TableName={0}; Rows={1}", e.TableName, e.Table.Rows.Count.ToString()); } } }