DataGridView меняет цвет фона ячейки
У меня есть следующий код:
private void dgvStatus_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
foreach (DataGridViewRow row in dgvStatus.Rows)
{
row.Cells[color.Index].Style.BackColor = Color.FromArgb(((GesTest.dsEssais.FMstatusAnomalieRow)row.DataBoundItem).iColor);
}
}
Я пытаюсь установить цвет фона каждой ячейки из столбца цвета фона. это не работает, цвет никогда не меняется. Есть идеи почему?
Я искал вокруг, но не нашел ничего полезного
Ответы
Ответ 1
Наконец-то мне удалось заставить его работать. Здесь код:
private void dgvStatus_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex != color.Index)
return;
e.CellStyle.BackColor = Color.FromArgb(int.Parse(((DataRowView)dgvStatus.Rows[e.RowIndex].DataBoundItem).Row[4].ToString()));
}
Если кто-то знает, что лучше сделать это, пожалуйста, не стесняйтесь публиковать его. Я открыт для предложения
Ответ 2
Просто создайте новый объект DataGridViewCellStyle, установите его задний цвет и затем назначьте ему стиль ячейки:
DataGridViewCellStyle style = new DataGridViewCellStyle();
style.BackColor = Color.FromArgb(((GesTest.dsEssais.FMstatusAnomalieRow)row.DataBoundItem).iColor);
style.ForeColor = Color.Black;
row.Cells[color.Index].Style = style;
Ответ 3
Если вас все еще интересуют, почему это не сработало для вас вначале:
Причина, по которой вы не видите изменений, внесенных в стиль ячейки, заключается в том, что вы делаете эти изменения до того, как форма была показана, и поэтому они не учитываются.
Изменение стилей ячеек в предлагаемых здесь мероприятиях будет выполнять задание, но они вызываются несколько раз, в результате чего ваши изменения стиля происходят чаще, чем вы хотите, и поэтому не очень эффективны.
Чтобы решить эту проблему, измените стиль после точки в коде, в котором отображается форма, или подпишитесь на событие Shown, и разместите там свои изменения (это событие называется значительно меньшим, чем другие предлагаемые события).
Ответ 4
dataGridView1.Rows[i].Cells[7].Style.BackColor = Color.LightGreen;
Ответ 5
int rowscount = dataGridView1.Rows.Count;
for (int i = 0; i < rowscount; i++)
{
if (!(dataGridView1.Rows[i].Cells[8].Value == null))
{
dataGridView1.Rows[i].Cells[8].Style.BackColor = Color.LightGoldenrodYellow;
}
}
Ответ 6
попробуйте следующее (в методе RowDataBound для GridView):
protected void GridViewUsers_RowDataBound(object sender, GridViewRowEventArgs e)
{
// this will only change the rows backgound not the column header
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[0].BackColor = System.Drawing.Color.LightCyan; //first col
e.Row.Cells[1].BackColor = System.Drawing.Color.Black; // second col
}
}
Ответ 7
protected void grdDataListeDetay_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.Cells[3].Text != "0")
{
for (int i = 0; i <= e.Row.Cells.Count - 1; i++)
{
e.Row.Cells[i].BackColor = System.Drawing.Color.Beige;
}
}
}
}
Ответ 8
dataGridView1[row, col].Style.BackColor = System.Drawing.Color.Red;
Ответ 9
Вы можете использовать VisibleChanged
обработчик событий.
private void DataGridView1_VisibleChanged(object sender, System.EventArgs e)
{
var grid = sender as DataGridView;
grid.Rows[0].Cells[0].Style.BackColor = Color.Yellow;
}