C # DataGridView не может отобразить набор данных, хранящихся в нем - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь вытянуть данные из базы данных в DataGridView3, вы можете увидеть их в правом столбце на изображении ниже. Когда я сделал отладку, я увидел, что DataSet сохраняет правильные значения, и при первой попытке, когда я делаю cellClick на dataGrid1, он показывает правильные значения. Но в последующих попытках DataGridView3 не отображает DataSet, хотя при отладке в DataSet есть правильные значения. DataGridView3 отображает только заголовки таблиц, а не записи в базе данных. Также, когда я нажимаю на этот заголовок (тем самым делая сортировку строк), появляются записи. Вы можете увидеть это на рисунке 2. Таким образом, проблема в DataGridView , которая не может отображать данные, которые хранятся в нем. Я пытался использовать методы Update(), Refresh(), Show() в DataGridView3, но это не помогло.

emitting cellClick event after clicking on header(sort)

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);
        }  
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...