Загрузка данных
private void AddEditVisit(int? id)
{
var frm = new Form
{
Text = id == -1 ? "Добавить приём" : "Редактировать приём",
Size = new Size(550, 520),
StartPosition = FormStartPosition.CenterParent,
BackColor = Color.FromArgb(30, 30, 30),
ForeColor = Color.White
};
int y = 30;
// Пациент
Label lblPatient = new Label { Text = "Пациент:", Location = new Point(20, y), AutoSize = true, ForeColor = Color.White };
ComboBox cmbPatient = new ComboBox
{
Location = new Point(20, y + 20),
Width = 400,
DropDownStyle = ComboBoxStyle.DropDownList,
BackColor = Color.FromArgb(55, 55, 55),
ForeColor = Color.White
};
DataTable dtPatients = DatabaseHelper.GetAllPatients();
cmbPatient.DataSource = dtPatients;
cmbPatient.DisplayMember = "Фамилия";
cmbPatient.ValueMember = "id_patient";
frm.Controls.Add(lblPatient);
frm.Controls.Add(cmbPatient);
y += 60;
// Дата
Label lblDate = new Label { Text = "Дата приёма:", Location = new Point(20, y), AutoSize = true, ForeColor = Color.White };
DateTimePicker dtpDate = new DateTimePicker
{
Location = new Point(20, y + 20),
Width = 200,
Format = DateTimePickerFormat.Short,
BackColor = Color.FromArgb(55, 55, 55),
ForeColor = Color.White
};
frm.Controls.Add(lblDate);
frm.Controls.Add(dtpDate);
y += 60;
// Время
Label lblTime = new Label { Text = "Время:", Location = new Point(20, y), AutoSize = true, ForeColor = Color.White };
DateTimePicker dtpTime = new DateTimePicker
{
Location = new Point(20, y + 20),
Width = 120,
Format = DateTimePickerFormat.Time,
ShowUpDown = true,
BackColor = Color.FromArgb(55, 55, 55),
ForeColor = Color.White
};
frm.Controls.Add(lblTime);
frm.Controls.Add(dtpTime);
y += 60;
// Врач
Label lblDoctor = new Label { Text = "Врач:", Location = new Point(20, y), AutoSize = true, ForeColor = Color.White };
ComboBox cmbDoctor = new ComboBox
{
Location = new Point(20, y + 20),
Width = 400,
DropDownStyle = ComboBoxStyle.DropDownList,
BackColor = Color.FromArgb(55, 55, 55),
ForeColor = Color.White
};
DataTable dtDoctors = DatabaseHelper.GetAllDoctors();
cmbDoctor.DataSource = dtDoctors;
cmbDoctor.DisplayMember = "Фамилия";
cmbDoctor.ValueMember = "id_doctor";
frm.Controls.Add(lblDoctor);
frm.Controls.Add(cmbDoctor);
y += 60;
// Диагноз
Label lblDiagnosis = new Label { Text = "Диагноз (необязательно):", Location = new Point(20, y), AutoSize = true, ForeColor = Color.White };
ComboBox cmbDiagnosis = new ComboBox
{
Location = new Point(20, y + 20),
Width = 400,
DropDownStyle = ComboBoxStyle.DropDownList,
BackColor = Color.FromArgb(55, 55, 55),
ForeColor = Color.White
};
DataTable dtDiagnoses = DatabaseHelper.GetAllDiagnoses();
cmbDiagnosis.DataSource = dtDiagnoses;
cmbDiagnosis.DisplayMember = "Название";
cmbDiagnosis.ValueMember = "id_diagnosis";
cmbDiagnosis.SelectedIndex = -1;
frm.Controls.Add(lblDiagnosis);
frm.Controls.Add(cmbDiagnosis);
y += 60;
// Анамнез
Label lblAnamnesis = new Label { Text = "Анамнез:", Location = new Point(20, y), AutoSize = true, ForeColor = Color.White };
TextBox txtAnamnesis = new TextBox
{
Location = new Point(20, y + 20),
Width = 400,
Height = 80,
Multiline = true,
BackColor = Color.FromArgb(55, 55, 55),
ForeColor = Color.White,
BorderStyle = BorderStyle.FixedSingle
};
frm.Controls.Add(lblAnamnesis);
frm.Controls.Add(txtAnamnesis);
y += 110;
// Если редактирование – загружаем данные
if (id != -1)
{
var dt = DatabaseHelper.GetAllVisits();
foreach (DataRow row in dt.Rows)
if (Convert.ToInt32(row["id_visit"]) == id)
{
// ID полей есть в таблице, даже если визуально скрыты
if (row.Table.Columns.Contains("id_patient"))
{
int patientId = Convert.ToInt32(row["id_patient"]);
for (int i = 0; i < cmbPatient.Items.Count; i++)
{
var item = (DataRowView)cmbPatient.Items[i];
if (Convert.ToInt32(item["id_patient"]) == patientId)
{
cmbPatient.SelectedIndex = i;
break;
}
}
}
if (row.Table.Columns.Contains("id_doctor"))
{
int doctorId = Convert.ToInt32(row["id_doctor"]);
for (int i = 0; i < cmbDoctor.Items.Count; i++)
{
var item = (DataRowView)cmbDoctor.Items[i];
if (Convert.ToInt32(item["id_doctor"]) == doctorId)
{
cmbDoctor.SelectedIndex = i;
break;
}
}
}
if (row.Table.Columns.Contains("id_diagnosis") && row["id_diagnosis"] != DBNull.Value)
{
int diagnosisId = Convert.ToInt32(row["id_diagnosis"]);
for (int i = 0; i < cmbDiagnosis.Items.Count; i++)
{
var item = (DataRowView)cmbDiagnosis.Items[i];
if (Convert.ToInt32(item["id_diagnosis"]) == diagnosisId)
{
cmbDiagnosis.SelectedIndex = i;
break;
}
}
}
if (row.Table.Columns.Contains("Дата") && row["Дата"] != DBNull.Value)
dtpDate.Value = Convert.ToDateTime(row["Дата"]);
if (row.Table.Columns.Contains("Время") && row["Время"] != DBNull.Value)
dtpTime.Value = DateTime.Today.Add((TimeSpan)row["Время"]);
if (row.Table.Columns.Contains("Анамнез"))
txtAnamnesis.Text = row["Анамнез"]?.ToString();
break;
}
}
// Кнопки
Button btnSave = new Button
{
Text = "Сохранить",
Location = new Point(120, y + 20),
Width = 120,
Height = 35,
DialogResult = DialogResult.OK,
BackColor = Color.FromArgb(0, 140, 220),
ForeColor = Color.White,
FlatStyle = FlatStyle.Flat
};
Button btnCancel = new Button
{
Text = "Отмена",
Location = new Point(260, y + 20),
Width = 120,
Height = 35,
DialogResult = DialogResult.Cancel,
BackColor = Color.FromArgb(70, 70, 70),
ForeColor = Color.White,
FlatStyle = FlatStyle.Flat
};
frm.Controls.Add(btnSave);
frm.Controls.Add(btnCancel);
frm.AcceptButton = btnSave;
frm.CancelButton = btnCancel;
if (frm.ShowDialog() == DialogResult.OK)
{
if (cmbPatient.SelectedItem == null)
{
MessageBox.Show("Выберите пациента!");
return;
}
if (cmbDoctor.SelectedItem == null)
{
MessageBox.Show("Выберите врача!");
return;
}
if (string.IsNullOrWhiteSpace(txtAnamnesis.Text))
{
MessageBox.Show("Заполните анамнез!");
return;
}
int patientId = (int)((DataRowView)cmbPatient.SelectedItem)["id_patient"];
int doctorId = (int)((DataRowView)cmbDoctor.SelectedItem)["id_doctor"];
int? diagnosisId = cmbDiagnosis.SelectedIndex != -1 ? (int?)((DataRowView)cmbDiagnosis.SelectedItem)["id_diagnosis"] : null;
string anamnesis = txtAnamnesis.Text;
// Создаём запись в visitrecords (для даты и времени)
DatabaseHelper.AddVisitRecord(patientId, doctorId, dtpDate.Value, dtpTime.Value.TimeOfDay, "очный");
var dtRecords = DatabaseHelper.GetAllVisitRecords();
int recordId = 0;
if (dtRecords.Rows.Count > 0)
recordId = Convert.ToInt32(dtRecords.Rows[dtRecords.Rows.Count - 1]["id_record"]);
if (id == -1)
DatabaseHelper.AddVisit(recordId, patientId, diagnosisId, null, anamnesis, doctorId);
else
DatabaseHelper.UpdateVisit(id.Value, recordId, patientId, diagnosisId, null, anamnesis, doctorId);
LoadAllData();
MessageBox.Show("Приём сохранён!");
}
}