private void OnSourceListItemChanged(ListChangedEventArgs e)
        {
            //Console.WriteLine("OnSourceListItemChanged: {0} {1}", e.NewIndex, ((DataRowView)SourceList[e.NewIndex])[0]);

            int  rowIndex                 = e.NewIndex + 1;
            bool rowVisible               = IsRowVisible(rowIndex);
            bool anyCellVisible           = false;
            ChangedFieldInfoCollection cc = GetChangedFields();

            if (cc.Count > 0)
            {
                foreach (ChangedFieldInfo fi in cc)
                {
                    int columnIndex = fi.FieldIndex + 1;

                    PropertyDescriptor pd = _pdc[columnIndex - 1];
                    if (pd.PropertyType == typeof(double))
                    {
                        _totals[columnIndex - 1] += fi.Delta;
                        if (!_invalidateWholeSummaryRow)
                        {
                            InvalidateCell(new RowColumnIndex(SourceList.Count + 1, columnIndex));
                        }
                    }

                    RowColumnIndex cellRowColumnIndex = new RowColumnIndex(rowIndex, columnIndex);
                    if (CurrentCell.CellRowColumnIndex == cellRowColumnIndex)
                    {
                        if (!CurrentCell.IsInConfirmChanges)
                        {
                            CurrentCell.RejectChanges();
                            Model.VolatileCellStyles.Clear(cellRowColumnIndex);
                            RenderStyles.Clear(cellRowColumnIndex);
                            CurrentCell.Renderer.RefreshContent();
                        }
                        else
                        {
                            this.InvalidateCell(cellRowColumnIndex);
                            continue;
                        }
                    }
                    else
                    {
                        InvalidateCell(cellRowColumnIndex);
                    }
                    if (rowVisible)
                    {
                        anyCellVisible |= IsColumnVisible(columnIndex);
                    }
                }
                if (_invalidateWholeSummaryRow)
                {
                    InvalidateCell(GridRangeInfo.Row(SourceList.Count + 1));
                }
            }
            else
            {
                for (int n = 0; n < _pdc.Count; n++)
                {
                    int            columnIndex = n + 1;
                    RowColumnIndex cell        = new RowColumnIndex(rowIndex, columnIndex);
                    if (rowVisible)
                    {
                        anyCellVisible |= IsColumnVisible(columnIndex);
                    }
                }
            }
            Blink(e);
            ProcessBlinkQueue();
            if (anyCellVisible)
            {
                InvalidateVisual(false);
            }
        }