System.Data.DataTable.SetOldRecord C# (CSharp) Method

SetOldRecord() private method

private SetOldRecord ( DataRow row, int proposedRecord ) : void
row DataRow
proposedRecord int
return void
        internal void SetOldRecord(DataRow row, int proposedRecord)
        {
            if (!_inDataLoad)
            {
                row.CheckInTable();
                CheckNotModifying(row);
            }

            if (proposedRecord == row._oldRecord)
            {
                return;
            }

            int originalRecord = row._oldRecord; // cache old record after potential RowChanging event
            try
            {
                // Check whether we need to update indexes
                if (LiveIndexes.Count != 0)
                {
                    if ((-1 == originalRecord) && (-1 != proposedRecord) && (-1 != row._newRecord) && (proposedRecord != row._newRecord))
                    {
                        // the transition from DataRowState.Added -> DataRowState.Modified
                        // with same current record but new original record
                        // needs to raise an ItemChanged or ItemMoved instead of ItemAdded in the ListChanged event.
                        // for indexes/views listening for both DataViewRowState.Added | DataViewRowState.ModifiedOriginal
                        originalRecord = row._newRecord;
                    }

                    DataViewRowState originalRecordStatePre = row.GetRecordState(originalRecord);
                    DataViewRowState proposedRecordStatePre = row.GetRecordState(proposedRecord);

                    row._oldRecord = proposedRecord;
                    if (proposedRecord != -1)
                    {
                        _recordManager[proposedRecord] = row;
                    }

                    DataViewRowState originalRecordStatePost = row.GetRecordState(originalRecord);
                    DataViewRowState proposedRecordStatePost = row.GetRecordState(proposedRecord);

                    RecordStateChanged(originalRecord, originalRecordStatePre, originalRecordStatePost,
                                       proposedRecord, proposedRecordStatePre, proposedRecordStatePost);
                }
                else
                {
                    row._oldRecord = proposedRecord;
                    if (proposedRecord != -1)
                    {
                        _recordManager[proposedRecord] = row;
                    }
                }
            }
            finally
            {
                if ((originalRecord != -1) && (originalRecord != row._tempRecord) &&
                    (originalRecord != row._oldRecord) && (originalRecord != row._newRecord))
                {
                    FreeRecord(ref originalRecord);
                }
                // else during an event 'row.AcceptChanges(); row.BeginEdit(); row.EndEdit();'

                if (row.RowState == DataRowState.Detached && row.rowID != -1)
                {
                    RemoveRow(row, false);
                }
            }
        }
DataTable