127 lines
4.8 KiB
C#
127 lines
4.8 KiB
C#
using MedicalDatabaseContracts;
|
|
using MedicalDatabaseContracts.Models;
|
|
using MedicalDatabaseContracts.SearchModels;
|
|
using MedicalDatabaseContracts.ViewModels;
|
|
using MedicalView.Diagnoses;
|
|
using MedicalView.Visits;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace MedicalView
|
|
{
|
|
public partial class FormAbstractList<M, V, S, F> : Form
|
|
where M : AbstractModel
|
|
where V : AbstractViewModel
|
|
where S : AbstractSearchModel
|
|
where F : FormAbstractDetail
|
|
{
|
|
protected ILogger _logger;
|
|
protected ILogic<M, V, S> _logic;
|
|
public FormAbstractList(ILogger<FormAbstractList<M, V, S, F>> logger, ILogic<M, V, S> logic)
|
|
{
|
|
InitializeComponent();
|
|
dataGridView.CellDoubleClick += EditItemToolStripMenuItem_Click;
|
|
dataGridView.CellContentDoubleClick += EditItemToolStripMenuItem_Click;
|
|
_logger = logger;
|
|
_logic = logic;
|
|
}
|
|
|
|
private void FormAbstractList_Load(object sender, EventArgs e)
|
|
{
|
|
LoadData();
|
|
}
|
|
|
|
private void RefreshItemsToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
LoadData();
|
|
}
|
|
|
|
protected virtual void AddItemToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
var service = Program.ServiceProvider?.GetService(typeof(F));
|
|
if (service is F form)
|
|
{
|
|
if (form.ShowDialog() == DialogResult.OK)
|
|
{
|
|
LoadData();
|
|
}
|
|
}
|
|
}
|
|
|
|
protected virtual void EditItemToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
if (dataGridView.SelectedRows.Count == 1)
|
|
{
|
|
var service = Program.ServiceProvider?.GetService(typeof(F));
|
|
if (service is F form)
|
|
{
|
|
form.ModelId = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
|
|
if (form.ShowDialog() == DialogResult.OK)
|
|
{
|
|
LoadData();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
protected virtual void DeleteItemToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
if (dataGridView.SelectedRows.Count == 1)
|
|
{
|
|
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
|
{
|
|
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
|
|
_logger.LogInformation("Удаление элемента");
|
|
try
|
|
{
|
|
if (!_logic.Delete(id))
|
|
{
|
|
throw new Exception("Ошибка при удалении. Дополнительная информация в логах.");
|
|
}
|
|
LoadData();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Ошибка удаления элемента");
|
|
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
protected virtual void LoadData()
|
|
{
|
|
SetStatusStripText("Загрузка списка...");
|
|
try
|
|
{
|
|
double elapsed;
|
|
var items = _logic.ReadList(out elapsed);
|
|
|
|
dataGridView.DataSource = items;
|
|
dataGridView.Columns["Id"].DisplayIndex = 0;
|
|
foreach (DataGridViewColumn column in dataGridView.Columns)
|
|
{
|
|
if (column.Name.Contains("Id"))
|
|
{
|
|
column.Visible = false;
|
|
}
|
|
}
|
|
dataGridView.ReadOnly = true;
|
|
|
|
_logger.LogInformation("Список загружен успешно");
|
|
SetStatusStripText($"Готово. Загружено записей: {items.Count}, время загрузки {elapsed} мск");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string errorMessage = "Ошибка загрузки списка";
|
|
_logger.LogError(string.Join(", ", errorMessage, $"\"{ex.Message}\""));
|
|
MessageBox.Show(string.Join("\n\n", errorMessage, $"{ex.Message}"), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
SetStatusStripText($"Ошибка загрузки");
|
|
}
|
|
}
|
|
protected virtual void SetStatusStripText(string text)
|
|
{
|
|
toolStripStatusLabel.Text = text;
|
|
}
|
|
}
|
|
}
|