Есть два связанных 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 запись;
Помогите, пожалуйста :(
Подписываем первый грид на событие 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;
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нужно сделать процедуру, которая будет удалять триггерыВариант 1
У меня возникла проблема: Который раз пытаюсь установить MySQL на Ububtu-server (1804) и постоянно какие-то ошибки