Загрузка...

Coloring listview rows. Populating from a MySQL database

Thread in C# created by mkmen100500 Jan 17, 2019. 377 views

  1. mkmen100500
    mkmen100500 Topic starter Jan 17, 2019 1 Jan 17, 2019
    Всем здравствуйте. Есть код:
    Code

    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.

    Чтобы цвет не сбрасывался при обновлении данных из базы делаю так:
    Code

    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 Topic starter Jan 17, 2019 1 Jan 17, 2019
    Windows Forms дорогие друзья.
     
  3. mkmen100500
    mkmen100500 Topic starter Jan 18, 2019 1 Jan 17, 2019
    Дорогие друзья, помогите утопающему)
     
  4. Anatas
    Anatas Jan 18, 2019 Banned 23 Aug 8, 2017
    мути еще темки, за эту спасибо
     
  5. mkmen100500
    mkmen100500 Topic starter Jan 21, 2019 1 Jan 17, 2019
    Anatas, да мне б кто помог проблему решить))
     
  6. Anatas
    Anatas Jan 21, 2019 Banned 23 Aug 8, 2017
    С чем связана твоя проблема
     
  7. mkmen100500
    mkmen100500 Topic starter Jan 23, 2019 1 Jan 17, 2019
    Anatas,
    При закрытии и новом открытии цвета сбрасываются и если строка закрашивается, и после этого добавить новую строку, то выводит Исключение типа "System.ArgumentOutOfRangeException " возникло в mscorlib.dll, но не было обработано в коде пользователя

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

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

    Code


    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 Topic starter Feb 12, 2019 1 Jan 17, 2019
    перешел на gridView с ListView кстати
     
  10. mkmen100500
    mkmen100500 Topic starter Feb 12, 2019 1 Jan 17, 2019
    делаю запись в отделбную колонку в таблице базы color_id, по этому id смотрю какой цвет применять
     
Top
Loading...