Всем здравствуйте. Есть код: Dictionary<int, Color> colorsList = new Dictionary<int, Color>(); private void toolStripButton5_Click(object sender, EventArgs e)//ИЗМЕНЕНИЕ ЦВЕТА СТРОКИ { for (int i = 0; i < listView1.Items.Count; i++) { if (listView1.Items[i].Selected == true) { if (toolStripComboBox1.Text == "Красный") { listView1.Items[i].BackColor = Color.Red; if (!colorsList.ContainsKey(i)) { colorsList.Add(i, Color.Red); } else { colorsList[i] = Color.Red; } } else if (toolStripComboBox1.Text == "Желтый") { listView1.Items[i].BackColor = Color.Yellow; if (!colorsList.ContainsKey(i)) { colorsList.Add(i, Color.Yellow); } else { colorsList[i] = Color.Yellow; } } else if (toolStripComboBox1.Text == "Зеленый") { listView1.Items[i].BackColor = Color.Green; if (!colorsList.ContainsKey(i)) { colorsList.Add(i, Color.Green); } else { colorsList[i] = Color.Green; } } else if (toolStripComboBox1.Text == "Без цвета") { listView1.Items[i].BackColor = Color.White; if (!colorsList.ContainsKey(i)) { colorsList.Add(i, Color.White); } else { colorsList[i] = Color.White; } } } } } public void SetColor() { foreach (var c in colorsList) { if (listView1.Items.Count >= c.Key) listView1.Items[c.Key].BackColor = c.Value; } } Код Dictionary<int, Color> colorsList = new Dictionary<int, Color>(); private void toolStripButton5_Click(object sender, EventArgs e)//ИЗМЕНЕНИЕ ЦВЕТА СТРОКИ { for (int i = 0; i < listView1.Items.Count; i++) { if (listView1.Items[i].Selected == true) { if (toolStripComboBox1.Text == "Красный") { listView1.Items[i].BackColor = Color.Red; if (!colorsList.ContainsKey(i)) { colorsList.Add(i, Color.Red); } else { colorsList[i] = Color.Red; } } else if (toolStripComboBox1.Text == "Желтый") { listView1.Items[i].BackColor = Color.Yellow; if (!colorsList.ContainsKey(i)) { colorsList.Add(i, Color.Yellow); } else { colorsList[i] = Color.Yellow; } } else if (toolStripComboBox1.Text == "Зеленый") { listView1.Items[i].BackColor = Color.Green; if (!colorsList.ContainsKey(i)) { colorsList.Add(i, Color.Green); } else { colorsList[i] = Color.Green; } } else if (toolStripComboBox1.Text == "Без цвета") { listView1.Items[i].BackColor = Color.White; if (!colorsList.ContainsKey(i)) { colorsList.Add(i, Color.White); } else { colorsList[i] = Color.White; } } } } } public void SetColor() { foreach (var c in colorsList) { if (listView1.Items.Count >= c.Key) listView1.Items[c.Key].BackColor = c.Value; } } Собственно происходит закрашивание строки на выбранный цвет из toolStripComboBox1. Чтобы цвет не сбрасывался при обновлении данных из базы делаю так: private async void toolStripButton4_Click(object sender, EventArgs e)//ОБНОВЛЕНИЕ ДАННЫХ { listView1.Items.Clear(); await LoadBanksAsync(); SetColor(); Код private async void toolStripButton4_Click(object sender, EventArgs e)//ОБНОВЛЕНИЕ ДАННЫХ { listView1.Items.Clear(); await LoadBanksAsync(); SetColor(); Теперь собственно проблема: При закрытии и новом открытии цвета сбрасываются и если строка закрашивается, и после этого добавить новую строку, то выводит Исключение типа "System.ArgumentOutOfRangeException " возникло в mscorlib.dll, но не было обработано в коде пользователя Дополнительные сведения: InvalidArgument=Значение '0' недопустимо для 'index'. Еще посмотрел что если в таблице более одной строки и все их окрасить, обновить то выбивает ту же ошибку. Решено только для одной строки в общем. Прошу помощи, дорогие друзья! Если нужен еще какой либо код, скину.
Anatas, При закрытии и новом открытии цвета сбрасываются и если строка закрашивается, и после этого добавить новую строку, то выводит Исключение типа "System.ArgumentOutOfRangeException " возникло в mscorlib.dll, но не было обработано в коде пользователя Дополнительные сведения: InvalidArgument=Значение '0' недопустимо для 'index'. Еще посмотрел что если в таблице более одной строки и все их окрасить, обновить то выбивает ту же ошибку. Решено только для одной строки в общем.
решил так: private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) { DataGridView grid = sender as DataGridView; if (grid != null) { if (e.RowIndex > -1 && e.RowIndex < dataGridView1.RowCount - 1) { if (dataGridView1[10, e.RowIndex].Value.ToString() == "0") grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White; else if (dataGridView1[10, e.RowIndex].Value.ToString() == "1") grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red; else if (dataGridView1[10, e.RowIndex].Value.ToString() == "2") grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow; else if (dataGridView1[10, e.RowIndex].Value.ToString() == "3") grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Green; } } } Код private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) { DataGridView grid = sender as DataGridView; if (grid != null) { if (e.RowIndex > -1 && e.RowIndex < dataGridView1.RowCount - 1) { if (dataGridView1[10, e.RowIndex].Value.ToString() == "0") grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White; else if (dataGridView1[10, e.RowIndex].Value.ToString() == "1") grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red; else if (dataGridView1[10, e.RowIndex].Value.ToString() == "2") grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow; else if (dataGridView1[10, e.RowIndex].Value.ToString() == "3") grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Green; } } }