C# DataTable RowChanged ExampleUse the DataTable type and its RowChanged and AcceptChanges event handlers.
DataTable RowChanged. The DataTable type is intricate. It provides many methods, properties and event handlers. The RowChanged event handler helps us detect when something changes in a DataTable. There are some secrets to its use.
Example. This example program creates a DataTable with four columns and five rows. It then hooks up the RowChanged event handler. To add RowChanged, type the table.RowChanged part and then the += characters.
Then Allow Visual Studio to create a method: press tab twice. You can edit the contents of that method to perform nearly any action.
Caution You cannot change a DataRow within RowChanged. This is prohibited. In RowChanged we must check values or call other methods.
Output In the output, we see that table_RowChanged is triggered four times. It is called each time a cell in a row changes.
Info We changed the "Dosage" cell repeatedly on the rows. We print this in table_RowChanged.
AcceptChanges. One tricky aspect to using DataTable and monitoring for changes is calling AcceptChanges. In my testing, it is best to call AcceptChanges after adding rows. Do not call it excessively or changes may keep reappearing.
C# program that uses RowChanged, DataTable
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
Do not do this. 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. A StackOverflowException will occur.
Discussion. Sometimes there is an action that you need to take when a row changes. The RowChanged event handler may be helpful here. This will often be specific to the program you are working on.
Tip We can use RejectChanges and AcceptChanges to process changes to the DataTable contents.
And The RowChanged and RowChanging events may be helpful in this style of code. ColumnChanged and ColumnChanging are also available.
Summary. Code that handles DataTables tends to be complex. And it is often application-specific, tied to a certain database schema and platform. Events like RowChanged, and methods like AcceptChanges are sometimes helpful in monitoring mutations.
© 2007-2022 sam allen.
see site info on the changelog.