J'ai le code suivant :
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);
}
}
J'essaie de définir la couleur d'arrière-plan de chaque cellule à partir de la colonne de couleur d'arrière-plan. cela ne fonctionne pas la couleur ne change jamais. Une idée de pourquoi?
J'ai regardé autour de moi mais je n'ai rien trouvé d'utile
J'ai finalement réussi à le faire fonctionner. Voici le code:
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()));
}
si quelqu'un sait mieux faire cela, n'hésitez pas à le poster. Je suis ouvert à la suggestion
Créez simplement un nouvel objet DataGridViewCellStyle , définissez sa couleur de fond puis affectez-lui le style de la cellule:
DataGridViewCellStyle style = new DataGridViewCellStyle();
style.BackColor = Color.FromArgb(((GesTest.dsEssais.FMstatusAnomalieRow)row.DataBoundItem).iColor);
style.ForeColor = Color.Black;
row.Cells[color.Index].Style = style;
Si vous êtes toujours intéressé par pourquoi cela n'a pas fonctionné pour vous au début:
Si vous ne voyez pas les modifications que vous avez apportées au style de la cellule, c'est parce que vous avez effectué ces modifications avant le formulaire a été affiché, de sorte qu'elles ne sont pas prises en compte.
Changer les styles de cellule dans les événements suggérés ici fera l'affaire, mais on les appelle plusieurs fois, ce qui entraîne des changements de style plus fréquents que vous le souhaitez et ne sont donc pas très efficaces.
Pour résoudre ce problème, modifiez le style après le point de votre code dans lequel le formulaire est affiché ou abonnez-vous à l'événement Shown et placez-y vos modifications (cet événement est appelé beaucoup moins que les autres événements suggérés).
dataGridView1.Rows[i].Cells[7].Style.BackColor = Color.LightGreen;
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;
}
}
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;
}
}
}
}
essayez ce qui suit (dans la méthode RowDataBound de 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
}
}
dataGridView1[row, col].Style.BackColor = System.Drawing.Color.Red;