public override void SaveRecord()
        {
            dataGridView.EndEdit();
            _syncViews = false;
            var list = SoftSuppliersFromViewport();

            if (!ValidateViewportData(list))
            {
                _syncViews = true;
                return;
            }
            for (var i = 0; i < list.Count; i++)
            {
                var row = _softSuppliers.Select().Rows.Find(list[i].IdSoftSupplier);
                if (row == null)
                {
                    var idSoftSupplier = SoftSuppliersDataModel.Insert(list[i]);
                    if (idSoftSupplier == -1)
                    {
                        _syncViews = true;
                        return;
                    }
                    ((DataRowView)_vSnapshotSoftSuppliers[i])["ID Supplier"] = idSoftSupplier;
                    _softSuppliers.Select().Rows.Add(DataRowViewToArray((DataRowView)_vSnapshotSoftSuppliers[i]));
                }
                else
                {
                    if (RowToSoftSupplier(row) == list[i])
                    {
                        continue;
                    }
                    if (SoftSuppliersDataModel.Update(list[i]) == -1)
                    {
                        _syncViews = true;
                        return;
                    }
                    row["Supplier"] = list[i].SoftSupplierName == null ? DBNull.Value : (object)list[i].SoftSupplierName;
                }
            }
            list = SoftSuppliersFromView();
            for (var i = 0; i < list.Count; i++)
            {
                var rowIndex = -1;
                for (var j = 0; j < dataGridView.Rows.Count; j++)
                {
                    if ((dataGridView.Rows[j].Cells["idSoftSupplier"].Value != null) &&
                        !string.IsNullOrEmpty(dataGridView.Rows[j].Cells["idSoftSupplier"].Value.ToString()) &&
                        ((int)dataGridView.Rows[j].Cells["idSoftSupplier"].Value == list[i].IdSoftSupplier))
                    {
                        rowIndex = j;
                    }
                }
                if (rowIndex == -1)
                {
                    if (SoftSuppliersDataModel.Delete(list[i].IdSoftSupplier.Value) == -1)
                    {
                        _syncViews = true;
                        return;
                    }
                    _softSuppliers.Select().Rows.Find(list[i].IdSoftSupplier).Delete();
                }
            }
            _syncViews = true;
            MenuCallback.EditingStateUpdate();
        }