// Обновляем данные в БД в фоновом режиме private void backgroundDbUpdateWorker_DoWork(object sender, DoWorkEventArgs e) { DbRecordChangesTask updateDbTask = e.Argument as DbRecordChangesTask; try { using (MedicamentRemainsContext mc = new MedicamentRemainsContext()) { MedicamentRemain record = updateDbTask.DbRecord as MedicamentRemain; record.UpdateDate = DateTime.Now; switch (updateDbTask.ChangesType) { case DbRecordChangesType.Create: backgroundDbUpdateWorker.ReportProgress(0, "Створення запису по медикаменту " + record.Medicament + " ..."); mc.Medicaments.Attach(record.Medicament); mc.MedicamentRemains.Add(record); mc.SaveChanges(); backgroundDbUpdateWorker.ReportProgress(0, "Запис успішно доданий до бази данних!"); break; case DbRecordChangesType.Update: backgroundDbUpdateWorker.ReportProgress(0, "Оновлення запису по медикаменту " + record.Medicament + " ..."); mc.Medicaments.Attach(record.Medicament); mc.Entry <MedicamentRemain>(record).State = System.Data.Entity.EntityState.Modified; mc.SaveChanges(); backgroundDbUpdateWorker.ReportProgress(0, "Запис успішно оновлений у базі данних!"); break; case DbRecordChangesType.Remove: backgroundDbUpdateWorker.ReportProgress(0, "Видалення запису по медикаменту " + record.Medicament + " ..."); MedicamentRemain item = mc.MedicamentRemains.Where(p => (p.Id == record.Id)).First(); mc.MedicamentRemains.Remove(item); mc.SaveChanges(); backgroundDbUpdateWorker.ReportProgress(0, "Запис успішно видалений з бази данних!"); break; } } } catch (Exception ex) { backgroundDbUpdateWorker.ReportProgress(0, "Помилка: " + ex.Message); } // Задержка, чтобы пользователь смог прочитать сообщение об успехе операции либо об ошибке System.Threading.Thread.Sleep(3000); }
private void actionButton_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(medicamentNameTextBox.Text)) { NotificationHelper.ShowError("Ви не ввели назву"); return; } try { using (MedicamentRemainsContext mc = new MedicamentRemainsContext()) { if (loadedMedicament == null) { currentMedicament = new Medicament(); } else { currentMedicament = loadedMedicament; } currentMedicament.Name = medicamentNameTextBox.Text.Trim(); currentMedicament.Meter = meterCBList.SelectedItem as Meter; currentMedicament.MeterId = Convert.ToInt32(meterCBList.SelectedValue); currentMedicament.Group = null; currentMedicament.MedicamentGroupId = Convert.ToInt32(medGroupsCBList.SelectedValue); mc.Meters.Attach(currentMedicament.Meter); if (currentMedicament.Id > 0) { mc.Medicaments.Attach(currentMedicament); mc.Entry <Medicament>(currentMedicament).State = System.Data.Entity.EntityState.Modified; } else { mc.Medicaments.Add(currentMedicament); } mc.SaveChanges(); NotificationHelper.ShowInfo("Данні успішно збережено!"); } } catch (Exception ex) { NotificationHelper.ShowError("Помилка при збережені данних до БД.\n Подробиці: \n" + ex.Message); } Close(); }
// TODO: Проверить удалиться ли элемент из DataGridView, если удалить его из связаного источника без вызова метода Update на DataGridView private void removeMedicamentButton_Click(object sender, EventArgs e) { Medicament selectedMedicament = medicamentsTable.SelectedRows[0].DataBoundItem as Medicament; int currentRowIndex = medicamentsTable.SelectedRows[0].Index; if (NotificationHelper.ShowQuestion(string.Format("Ви впевнені, що хочете видалити всі данні про медикамент '{0}'", selectedMedicament)) == System.Windows.Forms.DialogResult.Yes) { medicamentsList.Remove(selectedMedicament); new Task( () => { using (MedicamentRemainsContext mc = new MedicamentRemainsContext()) { mc.Medicaments.Attach(selectedMedicament); mc.Medicaments.Remove(selectedMedicament); mc.SaveChanges(); } } ).Start(); RecalculateRowsNumbers(currentRowIndex); } }
private void dbUpdateWorker_DoWork(object sender, DoWorkEventArgs e) { DbRecordChangesTask dbChangesTask = e.Argument as DbRecordChangesTask; try { using (MedicamentRemainsContext mc = new MedicamentRemainsContext()) { if (tableItem is Meter) { Meter record = dbChangesTask.DbRecord as Meter; switch (dbChangesTask.ChangesType) { case DbRecordChangesType.Create: dbUpdateWorker.ReportProgress(0, "Створення нової одиниці виміру..."); record.Name = record.Name.Trim(); mc.Meters.Add(record); break; case DbRecordChangesType.Update: dbUpdateWorker.ReportProgress(0, "Змінення одиниці виміру..."); record.Name = record.Name.Trim(); mc.Meters.Attach(record); mc.Entry <Meter>(record).State = System.Data.Entity.EntityState.Modified; break; case DbRecordChangesType.Remove: dbUpdateWorker.ReportProgress(0, "Видалення одиниці виміру..."); mc.Meters.Attach(record); mc.Meters.Remove(record); break; } } else if (tableItem is HospitalDepartment) { HospitalDepartment record = dbChangesTask.DbRecord as HospitalDepartment; switch (dbChangesTask.ChangesType) { case DbRecordChangesType.Create: dbUpdateWorker.ReportProgress(0, "Створення нового відділення..."); record.Name = record.Name.Trim(); mc.HospitalDepartments.Add(record); break; case DbRecordChangesType.Update: dbUpdateWorker.ReportProgress(0, "Змінення даних про відділення..."); record.Name = record.Name.Trim(); mc.HospitalDepartments.Attach(record); mc.Entry <HospitalDepartment>(record).State = System.Data.Entity.EntityState.Modified; break; case DbRecordChangesType.Remove: dbUpdateWorker.ReportProgress(0, "Видалення даних про відділення..."); mc.HospitalDepartments.Attach(record); mc.HospitalDepartments.Remove(record); break; } } else if (tableItem is MedicamentGroup) { MedicamentGroup record = dbChangesTask.DbRecord as MedicamentGroup; switch (dbChangesTask.ChangesType) { case DbRecordChangesType.Create: dbUpdateWorker.ReportProgress(0, "Створення нової группи медикаментів..."); record.Name = record.Name.Trim(); mc.MedicamentsGroups.Add(record); break; case DbRecordChangesType.Update: dbUpdateWorker.ReportProgress(0, "Змінення группи медикаментів..."); record.Name = record.Name.Trim(); mc.MedicamentsGroups.Attach(record); mc.Entry <MedicamentGroup>(record).State = System.Data.Entity.EntityState.Modified; break; case DbRecordChangesType.Remove: dbUpdateWorker.ReportProgress(0, "Видалення группи медикаментів..."); mc.MedicamentsGroups.Attach(record); mc.MedicamentsGroups.Remove(record); break; } } mc.SaveChanges(); if (tableItem is HospitalDepartment) { isDepartmentListUpdated = true; } dbUpdateWorker.ReportProgress(0, "Дані успішно збережені!"); } } catch (Exception ex) { dbUpdateWorker.ReportProgress(0, "Помилка: " + ex.Message); } Thread.Sleep(3000); }