c# - una - Cambiando dinĂ¡micamente el color de la celda datagridview.
datagridview c# cambiar color fila (4)
Considere utilizar el evento DataBindingComplete para actualizar el estilo. El siguiente código cambia el estilo de la celda:
private void Grid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
this.Grid.Rows[2].Cells[1].Style.BackColor = Color.Green;
}
Tengo un objeto dataGridView que se rellena con datos. Quiero hacer clic en un botón y hacer que cambie el color del fondo de la celda. Esto es lo que tengo actualmente
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
}
}
TODOS estos tres hacen que la tabla se vuelva a dibujar sobre sí misma de forma superpuesta y tratar de redimensionar las tablas se convierte en un desastre. al hacer clic en una celda, el valor permanece resaltado y el color de fondo no cambia.
P: ¿Cómo puedo cambiar el color de fondo de una celda individual después de que exista la tabla?
Esto funciona para mi
dataGridView1.Rows[rowIndex].Cells[columnIndex].Style.BackColor = Color.Red;
Gracias trabajando
Aquí he terminado con esto por el campo de cantidad es cero significa que se muestra que las celdas están en color rojo
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++;
}
}
Implemente su propia extensión de DataGridViewTextBoxCell y anule el método Paint de esta manera:
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);
}
}
Luego, en el conjunto de códigos de la propiedad CellTemplate de su columna a la instancia de su clase
columns.Add(new DataGridViewTextBoxColumn() {CellTemplate = new MyDataGridViewTextBoxCell()});