DataTable
RowChanged
DataTable
provides many methods, properties and event handlers. The RowChanged
event handler helps us detect when something changes in a DataTable
.
Sometimes there is an action that you need to take when a row changes in the DataTable
. The RowChanged
event handler may be helpful here.
This program creates a DataTable
with 4 columns and 5 rows. It then hooks up the RowChanged
event handler. To add RowChanged
, type table.RowChanged
and then the += characters.
DataRow
within RowChanged
. This is prohibited. In RowChanged
we must check values or call other methods.table_RowChanged
is triggered four times. It is called each time a cell in a row changes.table_RowChanged
.using System; using System.Data; class Program { static void Main() { DataTable table = new DataTable(); // ... Unique id. 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)); // ... Five DataRows. 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(); // ... Handle RowChanged. table.RowChanged += table_RowChanged; // ... Change a row. table.Rows[0]["Dosage"] = 50; table.Rows[0]["Dosage"] = -1; // ... Pause. Console.WriteLine("[Press enter]"); Console.ReadLine(); table.Rows[0]["Dosage"] = 15; table.Rows[1]["Dosage"] = 800; } static void table_RowChanged(object sender, DataRowChangeEventArgs e) { Console.WriteLine("... Changed: " + (int)e.Row["Dosage"]); } }... Changed: 50 ... Changed: -1 [Press enter] ... Changed: 15 ... Changed: 800
StackOverflowException
If you try to change a cell in the RowChanged
event handler, an infinite loop may be entered. Each change will trigger another call to RowChanged
.
We can use RejectChanges
and AcceptChanges
to process changes to the DataTable
contents. The RowChanged
and RowChanging
events may be helpful.
ColumnChanged
and ColumnChanging
are also available. These detect when a DataColumn
has been modified.AcceptChanges
can help when monitoring for changes. In my testing, it is best to call AcceptChanges
after adding rows.Code that handles DataTables
tends to be complex and application-specific. Events like RowChanged
, and methods like AcceptChanges
are help in monitoring mutations.