RowChanged Event Firing on Unchanged Rows  
Author Message
Ladislav Svatos





PostPosted: .NET Framework Data Access and Storage, RowChanged Event Firing on Unchanged Rows Top

It seems that the RowChanged event is fired on unchanged rows. I wrote a small program to confirm that.

using System;
using System.Data;
using System.Text;

namespace Test
{
public class EventTest
{
const string IdColumnName = "id";
const string DataTimeColumnName = "DateTime";
DataSet dataSet = new DataSet();
DataTable dataTable = new DataTable("table");

static public void Main(string[] args)
{
EventTest eventTest = new EventTest();
}

public EventTest()
{
dataSet.Tables.Add(dataTable);

DataColumn column = new DataColumn(IdColumnName, System.Type.GetType("System.Int32"));
column.AutoIncrement = true;
column.AutoIncrementSeed = 1;
column.AutoIncrementStep = 1;
column.ReadOnly = true;
dataTable.Columns.Add(column);

column = new DataColumn(DataTimeColumnName, System.Type.GetType("System.DateTime"));
column.DefaultValue = DateTime.Now;
dataTable.Columns.Add(column);

dataTable.RowChanged += new DataRowChangeEventHandler(dataTable_RowChanged);

DataRow row = dataTable.NewRow();
dataTable.Rows.Add(row);
dataSet.AcceptChanges();

row = dataTable.NewRow();
dataTable.Rows.Add(row);
dataSet.AcceptChanges();
}

private void dataTable_RowChanged(Object sender, DataRowChangeEventArgs e)
{
Console.WriteLine("Row Changed Event - " + " action:" + e.Action +
" row id:" + e.Row[IdColumnName] + " row state:" + e.Row.RowState);
}
}
}

The program output:
Row Changed Event - action:Add row id:1 row state:Added
Row Changed Event - action:Commit row id:1 row state:Unchanged
Row Changed Event - action:Add row id:2 row state:Added
Row Changed Event - action:Commit row id:1 row state:Unchanged
Row Changed Event - action:Commit row id:2 row state:Unchanged

Of course I can ignore the event when the row state is unchanged, but for tables with many rows this can cause a serious performance penalty.
Is there any way to prevent this behaviour
TIA

Ladislav



.NET Development30