Esempio n. 1
0
        /// <summary>
        /// Applies all given transactions
        /// </summary>
        /// <param name="ops">Operation list</param>
        private void ApplyTransaction(List <UndoRedoOperationBase> ops)
        {
            int i = 0;

            while (i < ops.Count)
            {
                UndoRedoOperationBase r = ops[i];
                DataRow row             = r.Row;

                switch (r.OperationType)
                {
                case UndoRedoOperationBaseType.NewRow:
                    UndoRedoRowOperation rowOp       = (UndoRedoRowOperation)r;
                    DataTable            sourceTable = rowOp.Table;
                    DataRow newRow = sourceTable.NewRow();

                    if (rowOp.WasDeleted)
                    {
                        RestoreRowFields(rowOp, newRow);
                    }
                    bool flag = true;
                    int  j    = i + 1;
                    while (flag & j < ops.Count)
                    {
                        if (ops[j].OperationType == UndoRedoOperationBaseType.ChangeField)
                        {
                            UndoRedoFieldOperation f = (UndoRedoFieldOperation)ops[j];
                            newRow[f.ColumnName] = f.NewValue;
                            i = j - 1;
                        }
                        else
                        {
                            flag = false;
                        }
                        j++;
                    }
                    sourceTable.Rows.Add(newRow);

                    for (int n = r.ID; n < m_operations.Count; ++n)
                    {
                        if (m_operations[n].Row == row)
                        {
                            m_operations[n].Row = newRow;
                        }
                    }
                    break;

                case UndoRedoOperationBaseType.DeleteRow:
                    //((UndoRedoRowOperation)r).Table.Rows.Remove(row);
                    ((UndoRedoRowOperation)r).Row.Delete();
                    break;

                case UndoRedoOperationBaseType.ChangeField:
                    UndoRedoFieldOperation fieldOp = (UndoRedoFieldOperation)r;
                    row[fieldOp.ColumnName] = fieldOp.NewValue;
                    break;
                }
                i++;
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Handler for when the field value actually changes.  The application has now
 /// had a chance to set the proposed value, so we can record it as the new value.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void OnColumnChanged(object sender, DataColumnChangeEventArgs e)
 {
     if (m_doLogging)
     {
         for (int i = 0; i < waitingForChangedEventList.Count; i++)
         {
             UndoRedoFieldOperation r = (UndoRedoFieldOperation)waitingForChangedEventList[i];
             if ((r.Row == e.Row) && (r.ColumnName == e.Column.ColumnName))
             {
                 r.NewValue = e.ProposedValue;
                 waitingForChangedEventList.RemoveAt(i);
                 break;
             }
         }
     }
 }
Esempio n. 3
0
 /// <summary>
 /// Handler for when a field changes.  This records only the current (old) field value.
 /// The OnColumnChanged handler records the new value, giving the application a chance
 /// to change the proposed value.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void OnColumnChanging(object sender, DataColumnChangeEventArgs e)
 {
     if (m_doLogging)
     {
         object oldVal = e.Row[e.Column];
         int    trnIdx = m_operations.Count;
         UndoRedoFieldOperation record = new UndoRedoFieldOperation
                                             (trnIdx, e.Row.Table, e.Row, e.Column.ColumnName, oldVal, e.ProposedValue);
         if (m_trasaction)
         {
             record.TransactionId = curentTransactionID;
         }
         OnRedoUndoOperationAdding(new UndoRedoEventArgs(record));
         m_operations.Add(record);
         OnRedoUndoOperationAdded(new UndoRedoEventArgs(record));
         waitingForChangedEventList.Add(record);
         if (m_uncomittedRows.ContainsKey(e.Row))
         {
             m_uncomittedRows[e.Row].Add(trnIdx);
         }
     }
 }