Проблема со скоростью DataGridView CellFormating?

У меня есть DataGridView с большим количеством строк около 3k. Мне нужно сделать несколько строк разных цветов (3 типа цветов) в зависимости от конкретного значения. Когда я это делаю, нет проблем с 2 типами цветов, проблемы начинаются, если есть 3 цвета.
Полоса прокрутки исчезает, как и в 1.img, когда я прокручиваю вниз, она снова появляется. Вторая проблема заключается в том, что когда я дважды щелкаю DGV, чтобы просмотреть сведения о выбранном элементе, приложение не отвечает. Ни одна из проблем не возникает, когда есть 2 цвета.
Это 1.img 1.img


Это изображение с двумя цветами, как вы можете видеть, полоса прокрутки находится на своем месте, и когда я дважды щелкаю, нет «не отвечает» 2.img Вот код, с которым я работаю:

private void CheckQuantity(DataGridViewRow dr)
    {
        var art = dr.DataBoundItem as DeArt;
        if (art != null)
            dr.DefaultCellStyle.BackColor = art.QuantityMin > art.QuantityRemaining ? Color.LightSalmon : Color.Empty;
    }
    private void CheckPVA(DataGridViewRow dr)
    {
        var art = dr.DataBoundItem as DeArt;
        foreach (DeArtPVA v in PVAprice)
        {
            if (dr.DefaultCellStyle.BackColor == Color.LightSalmon && v.IdArt == art.Id)
            {
                dr.DefaultCellStyle.BackColor = Color.FromArgb(255, 120, 10);
                break;
            }
            if (v.IdArt == art.Id)
                dr.DefaultCellStyle.BackColor = Color.Yellow;
        }
    }

    protected override void DGVWarehouse_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        if (e.ColumnIndex == 0)
        {
            CheckQuantity(dgrDataGridView.Rows[e.RowIndex]);
            CheckPVA(dgrDataGridView.Rows[e.RowIndex]);
        }
    }

Любые идеи, почему?


person Brezhnews    schedule 28.02.2013    source источник
comment
Вы смотрите на определенные значения в одном конкретном столбце?   -  person Derek    schedule 28.02.2013
comment
@Derek для одного цвета да, но для двух других я ищу в отдельной таблице со ссылкой на эту таблицу.   -  person Brezhnews    schedule 28.02.2013


Ответы (1)


Будет ли что-то ON THE LINES из этого полезным?

private void DGVWarehouse_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            int colIndex = e.ColumnIndex;
            int rowIndex = e.RowIndex;


        if (colIndex == 0 && rowIndex >=0)
        {
            DataGridViewRow theRow = DGVWarehouse.Rows[rowIndex];

            if (theRow.Cells[colIndex].Value.ToString() != String.Empty || theRow.Cells[colIndex].Value.ToString() != null)
            {

                if (theRow.Cells[colIndex].Value.ToString() == "YourArtID")
                {
                    theRow.DefaultCellStyle.BackColor = Color.LightYellow;
                }
                else if (theRow.Cells[colIndex].Value.ToString() == "YourArtID")
                {
                    theRow.DefaultCellStyle.BackColor = Color.LightGray;
                }
                else if (theRow.Cells[colIndex].Value.ToString() == "YourArtID")
                {
                    theRow.DefaultCellStyle.BackColor = Color.Red;
                }
                else
                { 
                    // Your DEFAULT STYLE
                }
            }
        }
    }
person Derek    schedule 28.02.2013