Modification dynamique de la couleur des cellules de datagridview
j'ai un objet dataGridView qui est rempli de données. Je veux cliquer sur un bouton et une modification de la couleur de l'arrière-plan de la cellule. C'est ce que j'ai actuellement
foreach(DataGridViewRow row in dataGridView1.Rows)
{
foreach(DataGridViewColumn col in dataGridView1.Columns)
{
//row.Cells[col.Index].Style.BackColor = Color.Green; //doesn't work
//col.Cells[row.Index].Style.BackColor = Color.Green; //doesn't work
dataGridView1[col.Index, row.Index].Style.BackColor = Color.Green; //doesn't work
}
}
tous ces trois provoquent la table d'être redessinée au-dessus de lui-même d'une manière se chevauchant et essayer de redimensionner les tables devient un gâchis. en cliquant sur une cellule, la valeur reste surlignée et la couleur ne change pas.
Q: Comment puis-je changer la couleur de fond d'un cellule individuelle après que la table existe?
4 réponses
Cela fonctionne pour moi
dataGridView1.Rows[rowIndex].Cells[columnIndex].Style.BackColor = Color.Red;
implémentez votre propre extension de DataGridViewTextBoxCell et outrepassez la méthode Paint comme ceci:
class MyDataGridViewTextBoxCell : DataGridViewTextBoxCell
{
protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex,
DataGridViewElementStates cellState, object value, object formattedValue, string errorText,
DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
{
if (value != null)
{
if ((bool) value)
{
cellStyle.BackColor = Color.LightGreen;
}
else
{
cellStyle.BackColor = Color.OrangeRed;
}
}
base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value,
formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);
}
}
puis dans le code définir la propriété CellTemplate de votre colonne à l'instance de votre classe
columns.Add(new DataGridViewTextBoxColumn() {CellTemplate = new MyDataGridViewTextBoxCell()});
Merci, ce travail
ici j'en ai fini avec ça par Qty le champ est zéro signifie qu'il montre que les cellules sont en couleur rouge
int count = 0;
foreach (DataGridViewRow row in ItemDg.Rows)
{
int qtyEntered = Convert.ToInt16(row.Cells[1].Value);
if (qtyEntered <= 0)
{
ItemDg[0, count].Style.BackColor = Color.Red;//to color the row
ItemDg[1, count].Style.BackColor = Color.Red;
ItemDg[0, count].ReadOnly = true;//qty should not be enter for 0 inventory
}
ItemDg[0, count].Value = "0";//assign a default value to quantity enter
count++;
}
}
Savoir utiliser DataBindingComplete événement pour mettre à jour le style. Le code suivant change le style de la cellule:
private void Grid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
this.Grid.Rows[2].Cells[1].Style.BackColor = Color.Green;
}