2015-03-09 3 views
0

Я пытаюсь сделать цвет изменения ячейки, когда ее значение меньше 100, однако оно не меняет цвет ячейки. Я могу по умолчанию использовать цвет всей сетки, но он не работает для отдельных ячеек. Может кто-нибудь протянет руку?Как изменить цвет ячейки на основе значения в C#

Вот код, который я до сих пор:

  connection.Open(); 
      var SinglesDataTable = new DataTable(); 
      adapter.Fill(SinglesDataTable); 
      connection.Close(); 
      DataColumn hourlyavg = SinglesDataTable.Columns.Add("Hourly Average", typeof(String)); 

      for (int i = 0; i < SinglesDataTable.Rows.Count; i++) 
      { 
       object pickvalue = SinglesDataTable.Rows[i][1].ToString(); 
       object timevalue = SinglesDataTable.Rows[i][2].ToString(); 
       double pickval1 = Convert.ToDouble(pickvalue); 
       string timeS = ""; 
       timeS = timevalue.ToString(); 
       string timeSTrimmed = (timeS.Replace(":", "")); 
       string timeSTrimmedHoursMins = (timeSTrimmed.Remove(timeSTrimmed.Length - 2)); 
       string timehourminindecimal = timeSTrimmedHoursMins.Insert(2, "."); 
       double timeint = Convert.ToDouble(timehourminindecimal); 
       if (timeint < 1) 
       { 
        timeint = Math.Ceiling(timeint); 

       } 
       else 
       { 
        timeint = timeint; 
       } 
       Convert.ToInt32(pickvalue); 
       var hourlyratevar = pickval1/timeint; 
       double hourlyratedouble = Math.Round(hourlyratevar, 2); 
       int hourlyraterounded = (int)Math.Ceiling(hourlyratedouble); 
       SinglesDataTable.Rows[i][3] = hourlyraterounded; 



       string hourlyavgstring = SinglesDataTable.Rows[i][3].ToString(); 
       double hourlyavgint = Convert.ToDouble(hourlyavgstring); 


       foreach (DataGridViewRow row in SinglesGridView.Rows) 
        if (Convert.ToInt32(row.Cells[1].Value) > 100) 
        { 
         row.DefaultCellStyle.BackColor = Color.Red; 
        } 

       SinglesGridView.DataSource = SinglesDataTable; 

ответ

1
foreach (DataGridViewRow row in SinglesGridView.Rows) 
    if (Convert.ToInt32(row.Cells[1].Value) > 100) 
     row.Cells[1].Style.BackColor = Color.Red; 

есть еще один вариант: ручка CellPainting событие DataGridView. Например:

private void SinglesGridView_CellPainting(object sender, 
System.Windows.Forms.DataGridViewCellPaintingEventArgs e) 
{ 
    if (e.ColumnIndex == 1 && 
     e.RowIndex >= 0 && 
     Convert.ToInt32(SinglesGridView[e.ColumnIndex, e.RowIndex].Value) > 100) 
    e.CellStyle.BackColor = Color.Red; 
} 
+0

Привет, Я попробовал это, и это работает, но до сих пор привычка изменить цвет –

+0

@JonoA, вы пытаетесь установить контрольную точку на 'row.Cells [1] .Style.BackColor = Color.Red ; '? если он не попадет, цвет не изменится, очевидно. такая ситуация будет означать, что есть еще одна проблема. Я также думаю, что 'SinglesGridView.DataSource = SinglesDataTable;' должен идти перед foreach из-за поведения DataSource. и оба из них (источник данных и foreach) должны выйти наружу (после) 'for' loop – ASh

+0

Большое спасибо, это его решило^_^Извините, что опоздал на ответ. Ваша помощь очень ценится –

Смежные вопросы