/// <summary> /// Raises the DataSaveExecuting event. /// </summary> /// <param name="e">Data that contains the binder's saving event information.</param> protected virtual void OnDataSaveExecuting(DataBinderSavingEventArgs e) { if (DataSaveExecuting != null) DataSaveExecuting(this, e); }
private void SaveButton_Click(object sender, EventArgs e) { object _button = sender; if (_button == null) return; bool _enabled = Materia.GetPropertyValue<bool>(_button, "Enabled", true); if (!_enabled) return; _saving = false; GridFinishEdit(); DataBinderValidationEventArgs _args = Validate(); if (_args != null) { if (!_args.Valid) { if (_args.Control != null) { if (_args.Control.GetType().Name.ToLower().Contains("C1FlexGrid".ToLower()) || _args.Control.GetType().BaseType.Name.ToLower().Contains("C1FlexGrid".ToLower())) { if (!String.IsNullOrEmpty(_args.Notification.RLTrim())) { SetControlFocus((Control) _args.Control); MessageBox.Show(_args.Notification, "Entry Validation", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1); bool _allowediting = true; try { _allowediting = Materia.GetPropertyValue<bool>(_args.Control, "AllowEditing", true); } catch { } if (_allowediting) { int _row = -1; int _col = -1; try { _row = Materia.GetPropertyValue<int>(_args.Control, "Row", -1); } catch { } try { _col = Materia.GetPropertyValue<int>(_args.Control, "Col", -1); } catch { } if (_row > -1 && _col > -1) { try { Materia.InvokeMethod(_args.Control, "StartEditing", new object[] { _row, _col }); } catch { } } } } return; } else return; } else return; } else { if (_args.Cancel) return; } _enabled = Materia.GetPropertyValue<bool>(_button, "Enabled", true); try { Materia.SetPropertyValue(_button, "Enabled", false); } catch { } CancelRunningProcess = false; _saving = true; Action _valuesetdelegate = new Action(SetFieldValues); IAsyncResult _valuesetresult = _valuesetdelegate.BeginInvoke(null, _valuesetdelegate); while (!_valuesetresult.IsCompleted && !CancelRunningProcess) { OnDataGathering(new EventArgs()); Thread.Sleep(1); Application.DoEvents(); } if (CancelRunningProcess) { if (!_valuesetresult.IsCompleted) { try { _valuesetresult = null; } catch { } } try { Materia.SetPropertyValue(_button, "Enabled", _enabled); } catch { } Materia.RefreshAndManageCurrentProcess(); _saving = false; return; } _valuesetdelegate.EndInvoke(_valuesetresult); Action _fksetdelegate = new Action(SetForeignKeys); IAsyncResult _fksetresult = _fksetdelegate.BeginInvoke(null, _fksetdelegate); while (!_fksetresult.IsCompleted && !CancelRunningProcess) { OnDataGathering(new EventArgs()); Thread.Sleep(1); Application.DoEvents(); } if (CancelRunningProcess) { if (!_fksetresult.IsCompleted) { try { _fksetresult = null; } catch { } } try { Materia.SetPropertyValue(_button, "Enabled", _enabled); } catch { } Materia.RefreshAndManageCurrentProcess(); _saving = false; return; } _fksetdelegate.EndInvoke(_fksetresult); Func<string> _sqlgetdelegate = new Func<string>(Binding.GetUpdateStatements); IAsyncResult _sqlgetresult = _sqlgetdelegate.BeginInvoke(null, _sqlgetdelegate); while (!_sqlgetresult.IsCompleted && !CancelRunningProcess) { OnDataGathering(new EventArgs()); Thread.Sleep(1); Application.DoEvents(); } if (CancelRunningProcess) { if (!_sqlgetresult.IsCompleted) { try { _sqlgetresult = null; } catch { } } try { Materia.SetPropertyValue(_button, "Enabled", _enabled); } catch { } Materia.RefreshAndManageCurrentProcess(); _saving = false; return; } string _sql = _sqlgetdelegate.EndInvoke(_sqlgetresult); try { Materia.SetPropertyValue(_button, "Enabled", _enabled); } catch { } DataBinderSavingEventArgs _saveargs = new DataBinderSavingEventArgs(_sql); OnBeforeDataSave(_saveargs); AcceptUpdates(); if (!_saveargs.Cancel) { try { Materia.SetPropertyValue(_button, "Enabled", false); } catch { } _sql = ""; Func<string> _sqlgetfinaldelegate = new Func<string>(Binding.GetUpdateStatements); IAsyncResult _sqlgetfinalresult = _sqlgetfinaldelegate.BeginInvoke(null, _sqlgetfinaldelegate); while (!_sqlgetfinalresult.IsCompleted && !CancelRunningProcess) { OnDataGathering(new EventArgs()); Thread.Sleep(1); Application.DoEvents(); } if (CancelRunningProcess) { if (_sqlgetfinalresult != null) { try { _sqlgetfinalresult = null; } catch { } } try { Materia.SetPropertyValue(_button, "Enabled", _enabled); } catch { } Materia.RefreshAndManageCurrentProcess(); _saving = false; return; } string _query = _sqlgetfinaldelegate.EndInvoke(_sqlgetfinalresult); if (WithBlobDataSource()) { if (!String.IsNullOrEmpty(_query.RLTrim())) { if (!_query.RLTrim().ToLower().StartsWith("set global max_allowed_packet")) _sql = "SET GLOBAL max_allowed_packet = (1024 * 1204) * " + MySql.MaxAllowedPacket.ToString() + ";"; } } _sql += ((!String.IsNullOrEmpty(_sql.RLTrim())) ? "\n" : "") + _query; if (String.IsNullOrEmpty(_sql.RLTrim())) { try { Materia.SetPropertyValue(_button, "Enabled", _enabled); } catch { } Materia.RefreshAndManageCurrentProcess(); _saving = false; return; } _saveargs.CommandText = _sql; OnDataSaveExecuting(_saveargs); if (_saveargs.Cancel) { try { Materia.SetPropertyValue(_button, "Enabled", _enabled); } catch { } Materia.RefreshAndManageCurrentProcess(); _saving = false; return; } _sql = _saveargs.CommandText; IAsyncResult _saveresult = Que.BeginExecution(Connection, _sql, CommandExecution.ExecuteNonQuery); while (!_saveresult.IsCompleted && !CancelRunningProcess) { OnDataSaving(new EventArgs()); Thread.Sleep(1); Application.DoEvents(); } if (CancelRunningProcess) { if (!_saveresult.IsCompleted) { try { _saveresult = null; } catch { } } try { Materia.SetPropertyValue(_button, "Enabled", _enabled); } catch { } Materia.RefreshAndManageCurrentProcess(); _saving = false; return; } QueResult _result = Que.EndExecution(_saveresult); _saveargs = null; if (_result == null) { try { Materia.SetPropertyValue(_button, "Enabled", _enabled); } catch { } Materia.RefreshAndManageCurrentProcess(); _saving = false; return; } else { if (!String.IsNullOrEmpty(_result.Error.RLTrim())) _saveargs = new DataBinderSavingEventArgs(_sql, _result.Error); else _saveargs = new DataBinderSavingEventArgs(_sql, _result.RowsAffected); if (!String.IsNullOrEmpty(_result.Error.RLTrim())) _saveargs.ErrorNotification = "An error occured while trying to save the changes and updates to the current record(s). Please try again and\n/ or report this issue to the system administrator."; else { Action _updatedelegate = new Action(Update); IAsyncResult _updateresult = _updatedelegate.BeginInvoke(null, _updatedelegate); while (!_updateresult.IsCompleted) { OnDataLoading(new EventArgs()); Thread.Sleep(1); Application.DoEvents(); } _updatedelegate.EndInvoke(_updateresult); } try { Materia.SetPropertyValue(_button, "Enabled", _enabled); } catch { } Materia.RefreshAndManageCurrentProcess(); _saving = false; AcceptUpdates(); OnAfterDataSave(_saveargs); if (!String.IsNullOrEmpty(_saveargs.Error.RLTrim()) && !String.IsNullOrEmpty(_saveargs.ErrorNotification.RLTrim())) MessageBox.Show(_saveargs.ErrorNotification, "Record Update Failed", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); if (!_saveargs.Cancel) { AcceptAllChanges(); _haveupdates = false; Form _form = null; try { _form = (Form)ContainerControl; } catch { _form = null; } if (_form != null) { if (_form.Text.RLTrim().EndsWith("*")) _form.Text = _form.Text.Replace("*", ""); } } } } } }
/// <summary> /// Raises the BeforeDataSave event. /// </summary> /// <param name="e">Data that contains the binder's saving event information.</param> protected virtual void OnBeforeDataSave(DataBinderSavingEventArgs e) { if (BeforeDataSave != null) BeforeDataSave(this, e); }
/// <summary> /// Raises the AfterDataSave event. /// </summary> /// <param name="e">Data that contains the binder's saving event information.</param> protected virtual void OnAfterDataSave(DataBinderSavingEventArgs e) { if (AfterDataSave != null) AfterDataSave(this, e); }