86 lines
2.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> : Form
where M : AbstractModel
where V : AbstractViewModel
where S : AbstractSearchModel
{
protected ILogger _logger;
protected ILogic<M, V, S> _logic;
public FormAbstractList(ILogger<FormAbstractList<M, V, S>> logger, ILogic<M, V, S> logic)
{
InitializeComponent();
_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)
{
// code
}
protected virtual void EsitItemToolStripMenuItem_Click(object sender, EventArgs e)
{
// code
}
protected virtual void DeleteItemToolStripMenuItem_Click(object sender, EventArgs e)
{
// code
}
protected virtual void LoadData()
{
SetStatusStripText("Загрузка списка...");
try
{
long elapsed;
var items = _logic.ReadList(null, 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;
}
}
}