private void OnRowChanged (object sender, DataRowChangeEventArgs args)
{
int oldIndex,newIndex;
oldIndex = newIndex = -1;
oldIndex = IndexOf (args.Row);
UpdateIndex (true);
newIndex = IndexOf (args.Row);
/* ItemAdded */
if (args.Action == DataRowAction.Add && oldIndex != newIndex)
OnListChanged (new ListChangedEventArgs (ListChangedType.ItemAdded, newIndex, -1));
/* ItemChanged or ItemDeleted */
if (args.Action == DataRowAction.Change) {
if (oldIndex != -1 && oldIndex == newIndex)
OnListChanged (new ListChangedEventArgs (ListChangedType.ItemChanged, newIndex, -1));
else if (oldIndex != newIndex) {
if (newIndex < 0)
OnListChanged (new ListChangedEventArgs (ListChangedType.ItemDeleted, newIndex, oldIndex));
else
OnListChanged (new ListChangedEventArgs (ListChangedType.ItemMoved, newIndex, oldIndex));
}
}
/* Rollback - ItemAdded or ItemDeleted */
if (args.Action == DataRowAction.Rollback) {
if (oldIndex < 0 && newIndex > -1)
OnListChanged (new ListChangedEventArgs (ListChangedType.ItemAdded, newIndex, -1));
else if (oldIndex > -1 && newIndex < 0)
OnListChanged (new ListChangedEventArgs (ListChangedType.ItemDeleted, newIndex, oldIndex));
else if (oldIndex != -1 && oldIndex == newIndex)
OnListChanged (new ListChangedEventArgs (ListChangedType.ItemChanged, newIndex, -1));
}
}