Раскраска datagridview

105
16 февраля 2021, 01:50

Есть два связанных datagridview

 public void LoadData()
    {
        MySqlConnection conn = new MySqlConnection(conparms);
        conn.Open();
        MySqlCommand objCmd = new MySqlCommand(" SELECT график.id_графика, Врач.фамилия,Врач.имя, Врач.отчество, специальность.название, график.дата,график.время FROM Врач INNER JOIN специальность ON Врач.спец = специальность.id_спец INNER JOIN график ON график.врач = Врач.id_врача", conn); 

        MySqlDataAdapter adp = new MySqlDataAdapter(objCmd);
        DataTable dt = new DataTable();
        adp.Fill(dt);
        dataGridView1.DataSource = dt;
        MySqlConnection conn1 = new MySqlConnection(conparms);
        conn1.Open();
        MySqlCommand objCmd1 = new MySqlCommand("  SELECT пациент.фамилия, пациент.имя, пациент.отчество, запись.id_записи, запись.график FROM запись INNER JOIN пациент  ON запись.пациент = пациент.id_пациента;", conn1);

        MySqlDataAdapter adp1 = new MySqlDataAdapter(objCmd1);
        DataTable dt1 = new DataTable();
        adp1.Fill(dt1);
        dataGridView2.DataSource = dt1;

//связывание двух таблиц DataSet ds;

        ds = new DataSet();
        ds.Tables.Add(dt);
        ds.Tables.Add(dt1);
       ds.Relations.Add("myRelation", ds.Tables["table1"].Columns["id_графика"], ds.Tables["table2"].Columns["график"]);
        dataGridView1.DataSource = ds;
        dataGridView2.DataSource = ds;
        dataGridView1.DataMember = "table1";
        dataGridView2.DataMember = "table1.myRelation";
    }

Необходимо реализовать в первой таблицы цветовую раскраску строк. Например: Если во второй таблицы нет записи, которая соответствует первой, то строка окрашивается в зеленый (запись открыта).

Если во второй таблице есть запись, которая соответствует первой, то строка окрашивается в красный ( запись закрыта).

Может быть нужно сделать третью невидимую таблицу с запросом

SELECT запись.график, запись.id_записи FROM запись;

Помогите, пожалуйста :(

Answer 1

Подписываем первый грид на событие RowPrePaint.

private void DataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
    var row = dataGridView1.Rows[e.RowIndex];
    if (row.DataBoundItem == null)
        return;
    var rowView = (DataRowView)row.DataBoundItem;
    var dataRow = rowView.Row;
    if (dataRow.GetChildRows("myRelation").Length > 0)
        row.DefaultCellStyle.BackColor = Color.Red;
    else
        row.DefaultCellStyle.BackColor = Color.Green;
}

Полный пример приложения. Данные в DataTable заносятся вручную.

using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace WinFormApp1
{
    public partial class Form1 : Form
    {
        DataGridView dataGridView1;
        DataGridView dataGridView2;
        public Form1()
        {
            var dt1 = new DataTable();
            dt1.Columns.Add("id_графика", typeof(int));
            dt1.Columns.Add("name", typeof(string));
            var dt2 = new DataTable();
            dt2.Columns.Add("name", typeof(string));
            dt2.Columns.Add("график", typeof(int));
            dt1.Rows.Add(1, "Суханова");
            dt1.Rows.Add(2, "Суханова");
            dt1.Rows.Add(3, "Суханова");
            dt2.Rows.Add("Каплин", 1);
            dt2.Rows.Add("Ба", 2);
            dt2.Rows.Add("Бо", 2);
            var ds = new DataSet();
            ds.Tables.Add(dt1);
            ds.Tables.Add(dt2);
            ds.Relations.Add("myRelation", ds.Tables["table1"].Columns["id_графика"], ds.Tables["table2"].Columns["график"]);

            Size = new Size(500, 500);
            dataGridView1 = new DataGridView { Parent = this, Dock = DockStyle.Top };
            dataGridView2 = new DataGridView { Parent = this, Dock = DockStyle.Bottom };
            dataGridView1.DataSource = ds;
            dataGridView2.DataSource = ds;
            dataGridView1.DataMember = "table1";
            dataGridView2.DataMember = "table1.myRelation";
            dataGridView1.RowPrePaint += DataGridView1_RowPrePaint;
        }
        private void DataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
            var row = dataGridView1.Rows[e.RowIndex];
            if (row.DataBoundItem == null)
                return;
            var rowView = (DataRowView)row.DataBoundItem;
            var dataRow = rowView.Row;
            if (dataRow.GetChildRows("myRelation").Length > 0)
                row.DefaultCellStyle.BackColor = Color.Red;
            else
                row.DefaultCellStyle.BackColor = Color.Green;
        }
    }
}
READ ALSO
Переменные в Go при вызове db.Exec

Переменные в Go при вызове db.Exec

Когда я использую конструкции вида:

120
Как удалить все триггеры из таблицы?

Как удалить все триггеры из таблицы?

Нужно сделать процедуру, которая будет удалять триггерыВариант 1

112
Как установить MySQL 8.0 (8.0.15+) на Ubuntu 18.04 [так же для DigitalOcean]

Как установить MySQL 8.0 (8.0.15+) на Ubuntu 18.04 [так же для DigitalOcean]

У меня возникла проблема: Который раз пытаюсь установить MySQL на Ububtu-server (1804) и постоянно какие-то ошибки

99