Как динамически изменять цвета ячеек в datagridview?

#c# #visual-studio #datagridview

Вопрос:

Как я могу динамически изменять цвета представления данных в ячейке 5?

Пример: введите описание изображения здесь

2-я строка последнее значение ячейки 29508, я хочу, чтобы цвет ячейки 2-й строки был зеленым.

4-я строка последнее значение ячейки-2016, цвет ячейки 4-й строки должен быть оранжевым.

Вот коды:

 foreach (DataGridViewRow row in dataGridView1.Rows) {  XDocument x = XDocument.Load(@"../../Data/gemi1/gemi1s1.xml");  var nodes = x.Descendants("item").Where(x =gt; x.Element("id").Value.ToString() == row.Cells[0].Value.ToString());  int barhesap;  barhesap = Convert.ToInt32(row.Cells[7].Value);  foreach (XElement x5 in nodes)  {  if (Convert.ToInt32(row.Cells[5].Value) lt;= barhesap / 10)  {  row.Cells[5].Style.BackColor = Color.Lime;  }  else if (Convert.ToInt32(row.Cells[5].Value) lt;= barhesap / 8)  {  row.Cells[5].Style.BackColor = Color.Green;  }  else if (Convert.ToInt32(row.Cells[5].Value) lt;= barhesap / 6)  {  row.Cells[5].Style.BackColor = Color.DarkGreen;  }  else if (Convert.ToInt32(row.Cells[5].Value) lt;= barhesap / 4)  {  row.Cells[5].Style.BackColor = Color.Yellow;  }  else if (Convert.ToInt32(row.Cells[5].Value) lt;= barhesap / 2)  {  row.Cells[5].Style.BackColor = Color.Orange;  }  else if (Convert.ToInt32(row.Cells[5].Value) lt;= barhesap / 1.5)  {  row.Cells[5].Style.BackColor = Color.OrangeRed;  }  else if (Convert.ToInt32(row.Cells[5].Value) lt;= barhesap / 1.2)  {  row.Cells[5].Style.BackColor = Color.DarkRed;  }  else if (Convert.ToInt32(row.Cells[5].Value) lt;= barhesap / 1)  {  row.Cells[5].Style.BackColor = Color.Red;  row.Cells[5].Style.ForeColor = Color.White;  }  } }  

Мы повторно взяли значение barhesap в ячейке 7-го столбца. Это здесь:

 private void ekle_button_Click(object sender, EventArgs e) // Add button with save {  int veriid;  XmlDocument doc = new XmlDocument();  doc.Load(@"../../Data/gemi1/gemi1id.xml");  XmlNode node = doc.SelectSingleNode("/rootElement/id");  veriid = Convert.ToInt32(node.InnerText);  txtID.Text = veriid.ToString();  int barsonuc = 0;  int sayi = Convert.ToInt32(periyot_sayi_txt.Text);   if (periyot_aralik_cb.SelectedIndex == -1)  {  MessageBox.Show("Lütfen bakım periyodu için bir seçenek seçin", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);  return;  }  else if (periyot_aralik_cb.SelectedIndex == 0)  {  barsonuc = sayi * 1;  }  else if (periyot_aralik_cb.SelectedIndex == 1)  {  barsonuc = sayi * 24;  }  else if (periyot_aralik_cb.SelectedIndex == 2)  {  barsonuc = sayi * 168;  }  else if (periyot_aralik_cb.SelectedIndex == 3)  {  barsonuc = sayi * 720;  }  else if (periyot_aralik_cb.SelectedIndex == 4)  {  barsonuc = sayi * 8640;  }  ilerleme_bar.Maximum = barsonuc;  string sonsonuc = barsonuc.ToString();  XDocument xDoc = new XDocument();  string file_path = @"../../Data/gemi1/gemi1s1.xml";  xDoc = XDocument.Load(file_path);  XElement rootElement = xDoc.Root;  XElement newElement = new XElement("item",  new XElement("id", txtID.Text),  new XElement("parca_adi", parca_adi_txt.Text),  new XElement("son_bakim", son_bakim_txt.Text),  new XElement("periyot_sayi", periyot_sayi_txt.Text),  new XElement("periyot_aralik", periyot_aralik_cb.SelectedItem),  new XElement("bar_max", sonsonuc),  new XElement("pa_id", periyot_aralik_cb.SelectedIndex),  new XElement("ilerleme", sonsonuc));  rootElement.Add(newElement);  xDoc.Save(file_path);  // ID provider value  string file_pathid = @"../../Data/gemi1/gemi1id.xml";  XDocument id = XDocument.Load(file_pathid);  XElement node1 = id.Element("rootElement").Elements("id").FirstOrDefault();  if (node1 != null)  {  node1.SetElementValue("id", (Convert.ToInt32(txtID.Text)   1).ToString());  }  id.Save(file_pathid);  yukle(); }  

Но 1-й блок кода foreach не работает, и ячейки по-прежнему одного цвета. Как я могу это изменить?

Комментарии:

1. Вы использовали отладчик, чтобы убедиться, что один из if них верен и что задан цвет?

2. Я бы также посоветовал быть осторожным с математикой, если вы выполняете целочисленное деление с barhesap / x помощью : в терминах int 15/10 и 15/8 дают один и тот же результат; 1

3. можете ли вы привести мне пример ? @CaiusJard

4. Я не верю, что сказал что-то достойное примера?

5. Я думаю, что проблема заключается в условии утверждения if. Как сказал Кай Джард, barhesap / x может иметь тот же результат расчета.