2013-07-18 26 views
15

Mam obiekt dataGridView zapełniony danymi. Chcę kliknąć przycisk i zmienić kolor tła komórki. To, co obecnie mamDynamiczne zmienianie koloru komórki 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 
    } 
} 

Wszystkie te trzy przyczyny tabela być odnawiany na siebie w sposób nakładający się i próbuje ponownie wielkość tabel staje się bałagan. po kliknięciu komórki wartość pozostaje wyróżniona, a kolor tła się nie zmienia.

P: Jak zmienić kolor podświetlenia pojedynczej komórki po utworzeniu tabeli?

Odpowiedz

46

Działa to dla mnie

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

Dodaj; na końcu – szakwani

+0

Drogi Ehsanie, dziękuję Ci za wskazówkę, która mi odpowiada. – t4thilina

+0

@ t4thilina, Cieszę się, że pomogło. Pozdrawiam :) – Ehsan

0

Dzięki jego pracy

tutaj Skończyłem z tym polem Ilosc jest zero oznacza wykazano, że komórki są w kolorze czerwonym

 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

Wdrożenie własne rozszerzenie DataGridViewTextBoxCell i przesłonięcie metody Paint tak jak:

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

}

Następnie w kodzie ustalonym CellTemplate własność kolumnie do instancji klasy

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

lol, wybrałem najlepsze kolory dla "warning" i "ok" wcześniej, a także wybrałem 'Color.OrangeRed' dla" ostrzeżenia "na końcu, ale' Color.SpringGreen' dla "OK". – n00dles

Powiązane problemy