public override void LoadData() { dataGridView.AutoGenerateColumns = false; DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.Document; _softVersions = SoftVersionsDataModel.GetInstance(); // Дожидаемся дозагрузки данных, если это необходимо _softVersions.Select(); _vSoftVersions = new BindingSource { DataMember = "SoftVersions", Filter = StaticFilter }; if (!string.IsNullOrEmpty(StaticFilter) && !String.IsNullOrEmpty(DynamicFilter)) { _vSoftVersions.Filter += " AND "; } _vSoftVersions.Filter += DynamicFilter; _vSoftVersions.DataSource = DataSetManager.DataSet; if (ParentRow != null && ParentType == ParentTypeEnum.Software) { Text = string.Format(CultureInfo.InvariantCulture, "Версии ПО №{0}", ParentRow["ID Software"]); } else { throw new ViewportException("Неизвестный тип родительского объекта"); } //Инициируем колонки snapshot-модели for (var i = 0; i < _softVersions.Select().Columns.Count; i++) { _snapshotSoftVersions.Columns.Add(new DataColumn(_softVersions.Select().Columns[i].ColumnName, _softVersions.Select().Columns[i].DataType)); } //Загружаем данные snapshot-модели из original-view for (var i = 0; i < _vSoftVersions.Count; i++) { _snapshotSoftVersions.Rows.Add(DataRowViewToArray(((DataRowView)_vSoftVersions[i]))); } _vSnapshotSoftVersions = new BindingSource { DataSource = _snapshotSoftVersions }; _vSnapshotSoftVersions.CurrentItemChanged += VSnapshotVersionsCurrentItemChanged; dataGridView.DataSource = _vSnapshotSoftVersions; idVersion.DataPropertyName = "ID Version"; idSoftware.DataPropertyName = "ID Software"; Version.DataPropertyName = "Version"; dataGridView.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged; dataGridView.CellValidated += dataGridView_CellValidated; //События изменения данных для проверки соответствия реальным данным в модели dataGridView.CellValueChanged += dataGridView_CellValueChanged; //Синхронизация данных исходные->текущие _softVersions.Select().RowChanged += SoftLicKeysViewport_RowChanged; _softVersions.Select().RowDeleting += SoftLicKeysViewport_RowDeleting; _softVersions.Select().RowDeleted += SoftLicKeysViewport_RowDeleted; }
public override void SaveRecord() { dataGridView.EndEdit(); _syncViews = false; var list = SoftVersionsFromViewport(); if (!ValidateSoftVersions(list)) { _syncViews = true; return; } for (var i = 0; i < list.Count; i++) { var row = _softVersions.Select().Rows.Find(list[i].IdVersion); if (row == null) { var idLicKey = SoftVersionsDataModel.Insert(list[i]); if (idLicKey == -1) { _syncViews = true; return; } ((DataRowView)_vSnapshotSoftVersions[i])["ID Version"] = idLicKey; _softVersions.Select().Rows.Add(DataRowViewToArray((DataRowView)_vSnapshotSoftVersions[i])); } else { var softLicKeyFromView = RowToSoftVersion(row); if (softLicKeyFromView == list[i]) { continue; } if (SoftVersionsDataModel.Update(list[i]) == -1) { _syncViews = true; return; } row["ID Software"] = list[i].IdSoftware == null ? DBNull.Value : (object)list[i].IdSoftware; row["Version"] = list[i].Version == null ? DBNull.Value : (object)list[i].Version; } } list = SoftVersionsFromView(); 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["idVersion"].Value != null) && !string.IsNullOrEmpty(dataGridView.Rows[j].Cells["idVersion"].Value.ToString()) && ((int)dataGridView.Rows[j].Cells["idVersion"].Value == list[i].IdVersion)) { rowIndex = j; } } if (rowIndex != -1) { continue; } if (SoftVersionsDataModel.Delete(list[i].IdVersion.Value) == -1) { _syncViews = true; return; } _softVersions.Select().Rows.Find(list[i].IdVersion).Delete(); } _syncViews = true; MenuCallback.EditingStateUpdate(); if (CalcDataModelSoftwareConcat.HasInstance()) { CalcDataModelSoftwareConcat.GetInstance().Refresh(EntityType.Unknown, null, true); } }