Я пытаюсь вытянуть данные из базы данных в DataGridView3, вы можете увидеть их в правом столбце на изображении ниже. Когда я сделал отладку, я увидел, что DataSet сохраняет правильные значения, и при первой попытке, когда я делаю cellClick на dataGrid1, он показывает правильные значения. Но в последующих попытках DataGridView3 не отображает DataSet, хотя при отладке в DataSet есть правильные значения. DataGridView3 отображает только заголовки таблиц, а не записи в базе данных. Также, когда я нажимаю на этот заголовок (тем самым делая сортировку строк), появляются записи. Вы можете увидеть это на рисунке 2. Таким образом, проблема в DataGridView , которая не может отображать данные, которые хранятся в нем. Я пытался использовать методы Update()
, Refresh()
, Show()
в DataGridView3, но это не помогло.
using MySql.Data.MySqlClient;
using System;
using System.Data;
using System.Windows.Forms;
namespace Lab3
{
public partial class Form1 : Form
{
private MySqlConnection connection = null;
private DataSet dataSet = null;
private DataSet dataSetOld = null;
private MySqlDataAdapter doctorDataAdapter = null;
private MySqlDataAdapter patientDataAdapter = null;
private MySqlDataAdapter appointmentDataAdapter = null;
public Form1()
{
InitializeComponent();
}
public void setConnection(MySqlConnection connection)
{
this.connection = connection;
}
//creating DataSet
private DataSet getDataSet()
{
if (dataSet == null)
{
dataSet = new DataSet();
dataSet.Tables.Add("Doctor");
dataSet.Tables.Add("Patient");
dataSet.Tables.Add("Appointment");
}
return dataSet;
}
//set connection with database
public MySqlConnection Connect(string host, int port, string database,
string username, string password)
{
string connStr = "Server=" + host + ";Database=" + database + ";port=" + port + ";User Id=" + username + ";password=" + password;
MySqlConnection connection = new MySqlConnection(connStr);
connection.Open();
return connection;
}
public void FillDataGridView1ByDoctors()
{
getDataSet().Tables["Doctor"].Clear();
doctorDataAdapter = new MySqlDataAdapter(
"SELECT * FROM Doctor", connection);
new MySqlCommandBuilder(doctorDataAdapter);
doctorDataAdapter.Fill(getDataSet(), "Doctor");
dataGridView1.DataSource = getDataSet().Tables["Doctor"];
this.dataGridView1.Columns["id_doctor"].Visible = false;
}
public void FillDataGridView2ByPatients()
{
getDataSet().Tables["Patient"].Clear();
patientDataAdapter = new MySqlDataAdapter(
"SELECT * FROM Patient", connection);
new MySqlCommandBuilder(patientDataAdapter);
patientDataAdapter.Fill(dataSet, "Patient");
dataGridView2.DataSource = getDataSet().Tables["Patient"];
this.dataGridView2.Columns["id_patient"].Visible = false;
dataGridView2.ClearSelection();
}
public void FillDataGridView3ByAppointment(string table, int id)
{
getDataSet().Tables["Appointment"].Reset();
if (table == "Doctor")
{
appointmentDataAdapter = new MySqlDataAdapter(
"SELECT patient.name_patient AS `Имя`, patient.surname_patient, appointment.datetime " +
"FROM patient, appointment, doctor " +
"WHERE doctor.id_doctor = appointment.id_doctor AND patient.id_patient = appointment.id_patient AND doctor.id_doctor = " +
id, connection);
}
else
{
appointmentDataAdapter = new MySqlDataAdapter(
"SELECT doctor.name_doctor, doctor.surname_doctor, doctor.speciality, appointment.datetime " +
"FROM doctor, appointment, patient " +
"WHERE patient.id_patient = appointment.id_patient AND doctor.id_doctor = appointment.id_doctor AND patient.id_patient = " +
id, connection);
}
new MySqlCommandBuilder(appointmentDataAdapter);
appointmentDataAdapter.Fill(dataSet, "Appointment");
dataGridView3.DataSource = getDataSet().Tables["Appointment"];
}
private void dataGridView1_CellClick(object sender,
DataGridViewCellEventArgs e)
{
int selectedRow = dataGridView1.SelectedCells[0].RowIndex;
int key = (int)dataGridView1.Rows[selectedRow].Cells[0].Value;
dataGridView2.ClearSelection();
FillDataGridView3ByAppointment("Doctor", key);
}
private void dataGridView2_CellClick(object sender,
DataGridViewCellEventArgs e)
{
int selectedRow = dataGridView2.SelectedCells[0].RowIndex;
int key = (int)dataGridView2.Rows[selectedRow].Cells[0].Value;
dataGridView1.ClearSelection();
FillDataGridView3ByAppointment("Patient", key);
}
}
}