protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
 {
     if (SnapshotHasChanges())
     {
         var result = MessageBox.Show(@"Сохранить изменения в базу данных?", @"Внимание",
                                      MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
         if (result == DialogResult.Yes)
         {
             SaveRecord();
         }
         else
         if (result == DialogResult.No)
         {
             CancelRecord();
         }
         else
         {
             e.Cancel = true;
             return;
         }
     }
     _softSuppliers.Select().RowChanged  -= SoftSuppliersViewport_RowChanged;
     _softSuppliers.Select().RowDeleting -= SoftSuppliersViewport_RowDeleting;
     _softSuppliers.Select().RowDeleted  -= SoftSuppliersViewport_RowDeleted;
     base.OnClosing(e);
 }
        public override void LoadData()
        {
            dataGridView.AutoGenerateColumns = false;
            DockAreas      = WeifenLuo.WinFormsUI.Docking.DockAreas.Document;
            _softSuppliers = SoftSuppliersDataModel.GetInstance();

            //Ожидаем дозагрузки данных, если это необходимо
            _softSuppliers.Select();

            _vSoftSuppliers = new BindingSource
            {
                DataMember = "SoftSuppliers",
                DataSource = DataSetManager.DataSet
            };

            //Инициируем колонки snapshot-модели
            for (var i = 0; i < _softSuppliers.Select().Columns.Count; i++)
            {
                _snapshotSoftSuppliers.Columns.Add(new DataColumn(
                                                       _softSuppliers.Select().Columns[i].ColumnName, _softSuppliers.Select().Columns[i].DataType));
            }
            //Загружаем данные snapshot-модели из original-view
            for (var i = 0; i < _vSoftSuppliers.Count; i++)
            {
                _snapshotSoftSuppliers.Rows.Add(DataRowViewToArray((DataRowView)_vSoftSuppliers[i]));
            }
            _vSnapshotSoftSuppliers = new BindingSource {
                DataSource = _snapshotSoftSuppliers
            };
            _vSnapshotSoftSuppliers.CurrentItemChanged += v_snapshotSuppliers_CurrentItemChanged;

            dataGridView.DataSource         = _vSnapshotSoftSuppliers;
            idSoftSupplier.DataPropertyName = "ID Supplier";
            softSupplier.DataPropertyName   = "Supplier";

            dataGridView.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;

            dataGridView.CellValidated += dataGridView_CellValidated;
            //События изменения данных для проверки соответствия реальным данным в модели
            dataGridView.CellValueChanged += dataGridView_CellValueChanged;
            //Синхронизация данных исходные->текущие
            _softSuppliers.Select().RowChanged  += SoftSuppliersViewport_RowChanged;
            _softSuppliers.Select().RowDeleting += SoftSuppliersViewport_RowDeleting;
            _softSuppliers.Select().RowDeleted  += SoftSuppliersViewport_RowDeleted;
        }