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();
            }
        }