protected virtual void ValidateEntity(FormClosingEventArgs e) { IValidate iv = Value as IValidate; if (iv != null) { DatErrorList eList = iv.ValidateErrors(); if (eList != null && eList.Count > 0) { string ErrorsMessage = ""; foreach (DatErrorList.DatError derr in eList) { ErrorsMessage += derr.Description + "\n"; } MessageBox.Show(ErrorsMessage, "Обнаружены ошибки, сохранение невозможно", MessageBoxButtons.OK, MessageBoxIcon.Error); e.Cancel = true; return; } DatErrorList wList = iv.ValidateWarnings(); if (wList != null && wList.Count > 0) { string ErrorsMessage = ""; foreach (DatErrorList.DatError derr in wList) { ErrorsMessage += derr.Description + "\n"; } ErrorsMessage += "\n\nВы по прежнему хотите сохранить запись?\n"; DialogResult r = MessageBox.Show(ErrorsMessage, "Обнаружены замечания", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); switch (r) { case DialogResult.Abort: case DialogResult.Cancel: case DialogResult.None: case DialogResult.No: e.Cancel = true; return; case DialogResult.OK: case DialogResult.Retry: case DialogResult.Yes: case DialogResult.Ignore: break; default: break; } } } }
public void MarkErrorControls(Control ctlEntity, DatErrorList eList) { foreach (Control ctl in ctlEntity.Controls) { if (ctl is IDataMember) { DatErrorList.DatError error = eList.Find(delegate(DatErrorList.DatError de) { return(de.PropertyName == ((IDataMember)ctl).DataMember); }); if (error != null) { SetError(ctl, error.Description); } } else { MarkErrorControls(ctl, eList); } } Application.DoEvents(); }
protected override void CloseForm(FormClosingEventArgs e) { if (DialogResult == DialogResult.OK) { try { GetEntity(); if (NewValue == null) { return; } if (_CanSave) { DatErrorList wList = NewValue.ValidateWarnings(); DatErrorList eList = NewValue.ValidateErrors(); DatErrorProvider.Clear(); if (eList.Count > 0) { string ErrorsMessage = ""; foreach (DatErrorList.DatError derr in eList) { ErrorsMessage += derr.Description + "\n"; } MarkErrorControls(this, eList); MessageBox.Show(ErrorsMessage, "Обнаружены ошибки, сохранение невозможно", MessageBoxButtons.OK, MessageBoxIcon.Error); e.Cancel = true; return; } if (wList.Count > 0) { string ErrorsMessage = ""; foreach (DatErrorList.DatError derr in wList) { ErrorsMessage += derr.Description + "\n"; } ErrorsMessage += "\n\nВы по прежнему хотите сохранить запись?\n"; //ErrorsMessage += "\n" + DialogResult.Yes.ToString() + " - выйти и сохранить."; //ErrorsMessage += "\n" + DialogResult.No.ToString() + " - выйти, не сохраняя."; //ErrorsMessage += "\n" + DialogResult.Cancel.ToString() + " - возврат к редактированию."; //DialogResult r = MessageBox.Show(ErrorsMessage, "Обнаружены замечания", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button3); DialogResult r = MessageBox.Show(ErrorsMessage, "Обнаружены замечания", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); switch (r) { case DialogResult.Abort: case DialogResult.Cancel: case DialogResult.None: case DialogResult.No: e.Cancel = true; return; //case DialogResult.No: // e.Cancel = false; // return; case DialogResult.OK: case DialogResult.Retry: case DialogResult.Yes: case DialogResult.Ignore: break; default: break; } } if (NewValue is IHDWrapper) { ((IHDWrapper)NewValue).Save(OldValue); } else if (!NewValue.EqualDat(OldValue)) { NewValue.Save(); //if (NewValue is IDat) // NewValue.Load(((IDat)NewValue).ID); } } if (_OldValue != null) { NewValue.CopyTo(_OldValue); } } catch (Exception exp) { e.Cancel = true; new ExceptionForm("Внимание", "Не удалось сохранить элемент.\nДля более подробной информации раскройте детали сообщения об ошибке.", exp, MessageBoxIcon.Error).ShowDialog(); } } else { //GetEntity(); //bool changed = (NewValue != null && !NewValue.EqualDat(OldValue)); if (IsChanged) { DialogResult res = MessageBox.Show("Данные были изменены! Сохранить?\nОтмена - продолжить редактирование.", "Внимание", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (res == DialogResult.Yes) { this.DialogResult = DialogResult.OK; CloseForm(e); } e.Cancel = (res == DialogResult.Cancel); } } }