2013-07-18 26 views
15

Ho un oggetto dataGridView popolato con dati. Voglio fare clic su un pulsante e farlo cambiare il colore dello sfondo della cella. Questo è quello che ho attualmenteModifica dinamica colore cella datagridview

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 
    } 
} 

TUTTE queste tre cause tabella ridisegno su se stessa in maniera sovrapposta e cercando di ridimensionare i tavoli diventa un disastro. quando si fa clic su una cella, il valore rimane evidenziato e il backcolor non cambia.

Q: Come posso cambiare il colore di una singola cella dopo che la tabella esiste?

risposta

46

questo funziona per me

dataGridView1.Rows[rowIndex].Cells[columnIndex].Style.BackColor = Color.Red; 
+1

Aggiungi; alla fine – szakwani

+0

Caro Ehsan, grazie per il suggerimento che funziona per me. – t4thilina

+0

@ t4thilina, li ha aiutati. Saluti :) – Ehsan

0

Grazie esso lavorano

qui mi sono fatto con questo campo qty è pari a zero significa che dimostrato che le cellule sono in colore rosso

 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++; 
     } 

    } 
2

Implementare la propria estensione di DataGridViewTextBoxCell e sovrascrive il metodo Paint in questo modo:

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

}

Poi nel codice impostare la proprietà CellTemplate della colonna a un'istanza della classe

columns.Add(new DataGridViewTextBoxColumn() {CellTemplate = new MyDataGridViewTextBoxCell()}); 
+0

lol, stavo scegliendo i colori migliori per 'warning' e 'ok' prima, e ho anche scelto 'Color.OrangeRed' per 'warning' alla fine, ma' Color.SpringGreen' per 'OK'. – n00dles

Problemi correlati