Что касается Datagridview, который показывает содержимое таблицы базы данных в форме, если один столбец таблицы имеет логический тип, как я могу изменить цвет ячейки в соответствии с логическим значением?
Отвечает ли это на ваш вопрос? Как получить DataGridViewRow из события CellFormatting?
Вы хотели бы что-то вроде этого: если ячейка верна, измените цвет ячейки на зеленый, иначе (если ложь) измените цвет на красный
for(int i ==0;i<Totalrows;i++)
{
if (dataGridView1.Rows[i].Cells[columnIndex].Equals(True){
{
dataGridView1.Rows[i].Cells[columnIndex].Style.BackColor = Color.Green;
}
else
{
dataGridView1.Rows[i].Cells[columnIndex].Style.BackColor = Color.Red;
}
}
Вы можете перемещаться по данным в DataTable и изменять цвет фона соответствующей ячейки.
Здесь мы используем localdb для теста. Поскольку логического типа нет, в качестве примера возьмем nchar.
// use SqlDataAdapter to get data from database
using (SqlConnection conn = new SqlConnection(@"connection string"))
{
SqlDataAdapter sda = new SqlDataAdapter("Select * From Test", conn);
DataSet Ds = new DataSet();
sda.Fill(Ds, "TestTable");
// traverse the datatable
foreach (DataRow row in Ds.Tables[0].Rows)
{
// add new row
int index = dataGridView1.Rows.Add();
dataGridView1.Rows[index].Cells["Column1"].Value = row["Id"];
dataGridView1.Rows[index].Cells["Column2"].Value = row["Status"]; // true/false
dataGridView1.Rows[index].Cells["Column2"].Style.BackColor = row["Status"].ToString().Trim() == "True" ? Color.Green : Color.Red;
}
}
Вы можете добавить событие CellPainting
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex == 7 && Convert.ToString(e.Value.ToString()) == "True")
{
e.PaintBackground(e.ClipBounds, false);
dataGridView1[e.ColumnIndex, e.RowIndex].ToolTipText = e.Value.ToString();
PointF p = e.CellBounds.Location;
p.X += 24;
string path = "C:\\Users\\khali\\Desktop\\checkmark_18px.png";
e.Graphics.DrawImage(Image.FromFile(path), e.CellBounds.X, e.CellBounds.Y, 25, 16);
e.Handled = true;
}
else if (e.RowIndex >= 0 && e.ColumnIndex == 7 && Convert.ToString(e.Value.ToString()) == "False")
{
e.PaintBackground(e.ClipBounds, false);
dataGridView1[e.ColumnIndex, e.RowIndex].ToolTipText = e.Value.ToString();
PointF p = e.CellBounds.Location;
p.X += 24;
string path = "C:\\Users\\khali\\Desktop\\delete_100px.png";
e.Graphics.DrawImage(Image.FromFile(path), e.CellBounds.X, e.CellBounds.Y, 25, 16);
e.Handled = true;
}
}
пожалуйста, покажите свой код и что вы пытались сделать