valor una seleccionar net fila encabezado columna color celda cambiar c# dynamic datagridview cell backcolor

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()});