/* * Перегружаемые методы */ #region public override void ApplyChanges() /// <summary> /// Применить к объекту сделанные изменения на контроле. /// Если не все данные удовлетворяют формату ввода (например при вводе чисел), свойства объекта не изменяются, возвращается false /// Вызов base.ApplyChanges() обязателен /// </summary> /// <returns></returns> public override void ApplyChanges() { // Применяем сделанные изменения объектам for (int i = 0; i < flowLayoutPanelMain.Controls.Count; i++) { PowerUnitRunupControl c = flowLayoutPanelMain.Controls[i] as PowerUnitRunupControl; if (c == null) { continue; } c.ApplyChanges(); if (Flight != null && Flight.RunupsCollection != null && !ConditionExists(c.Runup)) { Flight.RunupsCollection.Add(c.Runup); } } /* * Все изменения сохранены в коллекции * * Здесь необходимо сохранить внесенные данные * Коллекция является StringConvertibleCollection и не имеет отдельной таблицы в базе данных, * а хранится в качестве поля таблицы AircraftFlights */ // base.ApplyChanges(); }
private void RunUpControlDeleted(object sender, EventArgs e) { PowerUnitRunupControl control = (PowerUnitRunupControl)sender; RunUp cond = control.Runup; if (cond.ItemId > 0 && MessageBox.Show("Do you really want to delete run-up?", "Deleting confirmation", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { //если информация о состоянии сохранена в БД //и получен положительный ответ на ее удаление try { GlobalObjects.NewKeeper.Delete(cond); } catch (Exception ex) { Program.Provider.Logger.Log("Error while removing data", ex); } flowLayoutPanelMain.Controls.Remove(control); control.Deleted -= RunUpControlDeleted; control.WorkTimeChanged -= RunUpControlWorkTimeChanged; control.Dispose(); } else if (cond.ItemId <= 0) { flowLayoutPanelMain.Controls.Remove(control); control.Deleted -= RunUpControlDeleted; control.WorkTimeChanged -= RunUpControlWorkTimeChanged; control.Dispose(); } }
/* * Реализация */ #region private void BuildControls() /// <summary> /// Строит нужные контролы /// </summary> private void BuildControls() { // Освобождаем старые контролы flowLayoutPanelMain.Controls.Clear(); if (Flight != null && Flight.RunupsCollection != null) { var aircraft = GlobalObjects.AircraftsCore.GetAircraftById(Flight.AircraftId); List <RunUp> runUps = Flight.RunupsCollection.ToArray().Where(r => r.BaseComponent.BaseComponentType.ItemId == _componentType.ItemId). ToList(); //группировка запусков по ИД детали и определение первого запуска в каждой группе List <RunUp> firsts = Flight.RunupsCollection.GroupBy(r => r.BaseComponentId).Select(ups => ups.First()).ToList(); for (int i = 0; i < runUps.Count; i++) { // Добавляем контрол для ввода данных по запускам PowerUnitRunupControl c = new PowerUnitRunupControl(aircraft, Flight, runUps[i]) { DetailLabelText = _componentType.ToString(), FligthDate = _flightDate, }; if (i > 0) { c.ShowHeaders = false; } //если добавляемый запуск является первым в группе, то блокируется список выбора foreach (RunUp first in firsts) { if (runUps[i] == first) { c.EnableDetailCombobox = false; } else { c.Deleted += RunUpControlDeleted; } } c.WorkTimeChanged += RunUpControlWorkTimeChanged; flowLayoutPanelMain.Controls.Add(c); RunUpControlWorkTimeChanged(c, null); } } flowLayoutPanelMain.Controls.Add(panelAddRunUp); }
/// <summary> /// Проверяет введенные данные. /// Если какое-либо поле не подходит по формату, следует сразу кидать MessageBox, ставить курсор в необходимое поле и возвращать false в качестве результата метода /// </summary> /// <returns></returns> public override bool CheckData() { // Проверяем введенные данные for (int i = 0; i < flowLayoutPanelMain.Controls.Count; i++) { PowerUnitRunupControl c = flowLayoutPanelMain.Controls[i] as PowerUnitRunupControl; if (c != null) { if (!c.CheckData()) { Visible = true; return(false); } } } // Все данные введены корректно return(true); }
private void LinkLabelAddNewLinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { var aircraft = GlobalObjects.AircraftsCore.GetAircraftById(Flight.AircraftId); PowerUnitRunupControl performance = new PowerUnitRunupControl(aircraft, _componentType) { FligthDate = _flightDate, }; performance.Deleted += RunUpControlDeleted; performance.WorkTimeChanged += RunUpControlWorkTimeChanged; if (flowLayoutPanelMain.Controls.Count > 1) { performance.ShowHeaders = false; } flowLayoutPanelMain.Controls.Remove(panelAddRunUp); flowLayoutPanelMain.Controls.Add(performance); flowLayoutPanelMain.Controls.Add(panelAddRunUp); }