private void DoRegist(EntityTable registedTable, EntityRow row, OPStatus opStatus) { IEntityRowAttributes rowAttributes = row.GetAttributesEntity(); bool isExist = registedTable.Rows.Contains(row); bool inTransaction = (State == DataTransactionState.Begin); switch (opStatus) { case OPStatus.Delete: if (isExist) { registedTable.Rows.Remove(row); } if (rowAttributes.Status == OPStatus.Add) { UnregistRowTransaction(row); } else { RegistRowTransaction(row, true); rowAttributes.Status = opStatus; } break; case OPStatus.Add: if (!isExist) { registedTable.Rows.Add(row); } RegistRowTransaction(row, false); rowAttributes.Status = opStatus; break; case OPStatus.Update: if (rowAttributes.Status != OPStatus.Add && rowAttributes.Status != OPStatus.Delete) { rowAttributes.Status = opStatus; //100/11/30 by Feng,避免已經BeginUpdate後才又有Table被查詢regist RegistRowTransaction(row, true); } break; case OPStatus.Steady: if (!isExist) { rowAttributes.Status = opStatus; registedTable.Rows.Add(row); RegistRowTransaction(row, true); } break; default: throw new Exception("EntityTableTransaction.Regist()"); } }
public void CancelUpdate() { if (IsUpdating) { State = DataTransactionState.Cancel; foreach (var taRow in rowTransactionMap.Values) { IEntityRowAttributes rowAttributes = taRow.Row.GetAttributesEntity(); EntityTable registedTable; switch (rowAttributes.Status) { case OPStatus.Add: if (TryGetRegistTable(taRow.Row, out registedTable)) { registedTable.Rows.Remove(taRow.Row); taRow.Row.OnPropertyChanged(""); //通知ForeignSetField刪除 } break; case OPStatus.Update: taRow.CancelUpdate(); break; case OPStatus.Delete: if (TryGetRegistTable(taRow.Row, out registedTable)) { taRow.CancelUpdate(); registedTable.Rows.Add(taRow.Row); } break; default: break; } } Reset(); } }