Загрузка...

Окрашивание строк listview. Заполнение из базы MySQL

Тема в разделе C# создана пользователем mkmen100500 17 янв 2019. 372 просмотра

  1. mkmen100500
    mkmen100500 Автор темы 17 янв 2019 1 17 янв 2019
    Всем здравствуйте. Есть код:
    Код

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

    Теперь собственно проблема:

    При закрытии и новом открытии цвета сбрасываются и если строка закрашивается, и после этого добавить новую строку, то выводит Исключение типа "System.ArgumentOutOfRangeException " возникло в mscorlib.dll, но не было обработано в коде пользователя

    Дополнительные сведения: InvalidArgument=Значение '0' недопустимо для 'index'.

    Еще посмотрел что если в таблице более одной строки и все их окрасить, обновить то выбивает ту же ошибку. Решено только для одной строки в общем.
    Прошу помощи, дорогие друзья! Если нужен еще какой либо код, скину.
     
  2. mkmen100500
    mkmen100500 Автор темы 17 янв 2019 1 17 янв 2019
    Windows Forms дорогие друзья.
     
  3. mkmen100500
    mkmen100500 Автор темы 18 янв 2019 1 17 янв 2019
    Дорогие друзья, помогите утопающему)
     
  4. Anatas
    Anatas 18 янв 2019 Заблокирован(а) 23 8 авг 2017
    мути еще темки, за эту спасибо
     
  5. mkmen100500
    mkmen100500 Автор темы 21 янв 2019 1 17 янв 2019
    Anatas, да мне б кто помог проблему решить))
     
  6. Anatas
    Anatas 21 янв 2019 Заблокирован(а) 23 8 авг 2017
    С чем связана твоя проблема
     
  7. mkmen100500
    mkmen100500 Автор темы 23 янв 2019 1 17 янв 2019
    Anatas,
    При закрытии и новом открытии цвета сбрасываются и если строка закрашивается, и после этого добавить новую строку, то выводит Исключение типа "System.ArgumentOutOfRangeException " возникло в mscorlib.dll, но не было обработано в коде пользователя

    Дополнительные сведения: InvalidArgument=Значение '0' недопустимо для 'index'.

    Еще посмотрел что если в таблице более одной строки и все их окрасить, обновить то выбивает ту же ошибку. Решено только для одной строки в общем.
     
  8. mkmen100500
    mkmen100500 Автор темы 12 фев 2019 1 17 янв 2019
    решил так:

    Код


    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;
    }
    }
    }
     
  9. mkmen100500
    mkmen100500 Автор темы 12 фев 2019 1 17 янв 2019
    перешел на gridView с ListView кстати
     
  10. mkmen100500
    mkmen100500 Автор темы 12 фев 2019 1 17 янв 2019
    делаю запись в отделбную колонку в таблице базы color_id, по этому id смотрю какой цвет применять
     
Загрузка...
Top