#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 дают один и тот же результат; 13. можете ли вы привести мне пример ? @CaiusJard
4. Я не верю, что сказал что-то достойное примера?
5. Я думаю, что проблема заключается в условии утверждения if. Как сказал Кай Джард, barhesap / x может иметь тот же результат расчета.