/// <summary> /// Se ejecuta antes de que entre en modo edicion alguna celda /// </summary> /// <history> /// [edgrodriguez] 11/08/2016 Created. /// </history> private void dtgGifts_BeginningEdit(object sender, DataGridBeginningEditEventArgs e) { //Preguntamos si desea agregar GuestStatusType para el calculo de costos if (cmbGuestStatus.SelectedValue == null && !_dontShowAgainGuestStatus) { MessageBoxResult result = UIHelper.ShowMessage("We recommend first select the status of the guest, that would help us calculate costs and prices, do you want to select it now?", MessageBoxImage.Question, "Intelligence Marketing"); if (result == MessageBoxResult.Yes) { e.Cancel = true; _hasError = true; _isCellCancel = true; _dontShowAgainGuestStatus = false; cmbGuestStatus.Focus(); } else { _dontShowAgainGuestStatus = true; } } else { _hasError = false; _isCellCancel = false; } //Si el grid no esta en modo edicion, permite hacer edicion. if (!GridHelper.IsInEditMode(dtgGifts) && !_hasError) { dtgGifts.BeginningEdit -= dtgGifts_BeginningEdit; //Obtenemos el objeto de la fila que se va a editar InvitationGift invitationGift = e.Row.Item as InvitationGift; //Obtenemos la celda que vamos a validar _igCurrentCell = dtgGifts.CurrentCell; //Hacemos la primera validacion InvitationValidationRules.StartEdit(ref invitationGift, ref _igCurrentCell, dtgGifts, ref _hasError); //Si tuvo algun error de validacion cancela la edicion de la celda. e.Cancel = _hasError; dtgGifts.BeginningEdit += dtgGifts_BeginningEdit; } //Si ya se encuenta en modo EDIT cancela la edicion, para no salirse de la celda sin hacer Commit antes else { e.Cancel = true; } }
/// <summary> /// Se ejecuta cuando la celda en edicion pierde el foco /// </summary> /// <history> /// [edgrodriguez] 16/08/2016 Created. /// </history> private void dtgGifts_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { //Si paso las validaciones del preparingCellForEdit if (!_hasError) { //Si viene en modo Commit if (e.EditAction == DataGridEditAction.Commit) { //esta bandera se pone en falso por que No se ha cancelado la edicion de la celda _isCellCancel = false; //Obtenemos el Objeto InvitationGift invitationGift = e.Row.Item as InvitationGift; //Bandera que checata que todo salga bien en la validacion siguiente. bool _hasErrorValidateEdit = false; //Validamos la celda // InvitationValidationRules.ValidateEdit(ref invitationGift, ref _hasErrorValidateEdit, ref _IGCurrentCell); //Si Paso las validaciones if (!_hasErrorValidateEdit) { //Obtenemos el program InvitationValidationRules.AfterEdit(_guestId, dtgGifts, ref invitationGift, _igCurrentCell, ref txtGiftTotalCost, ref txtGiftTotalPrice, ref txtGiftMaxAuth, cmbGuestStatus.SelectedItem as GuestStatusType, _catObj.Program); } //Si fallaron las validaciones del AfterEdit se cancela la edicion de la celda. else { e.Cancel = true; } } //Si entra en modo Cancel Se enciende esta bandera ya que servira en RowEditEnding else { _isCellCancel = true; } } }