TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

C# DataTable RowChanged Example: AcceptChanges

This C# article describes the DataTable type and its RowChanged event handler. It uses RowChanged and AcceptChanges.

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.

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"]);
    }
}

Output

... Changed:  50
... Changed:  -1
[Press enter]

... Changed:  15
... Changed:  800

In the output, we see that table_RowChanged is triggered four times. It is called each time a cell in a row changes. We changed the "Dosage" cell repeatedly on the rows. We print this in table_RowChanged.

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.

StackOverflowException

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.

Event

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.


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf