Datagridview проблема с краской - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть сетевое представление, в котором я обрабатываю данные из таблицы данных.Затем измените цвет на полях, которые являются проблемой.Я делаю это через событие ProgressChanged.Это код:

    private void bgwCompare_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        ReportRow rr = (ReportRow)e.UserState;
        if (rr.nRow == 1 && rr.nColumn == 2)
            rr.nColumn = 2;  // If I leave this in it works, if I remove it the single cell is not colored
        if (rr.nColumn == -1)
            dgvResults.Rows[rr.nRow].DefaultCellStyle.BackColor = Color.Yellow;
        else
            dgvResults.Rows[rr.nRow].Cells[rr.nColumn].Style.BackColor = Color.Salmon;


    }

Это становится ... ДЕЙСТВИТЕЛЬНО странным ... У меня, похоже, проблема только с одной ячейкой из более чем 1000 записей.

ЕСЛИ я пытаюсьчтобы посмотреть, как работает камера, она работает.(см. приведенный выше код rr.nRow == 1 && rr.nColumn == 2)

Если я закомментирую этот код, ячейка не будет окрашена.Если я оставлю этот код, ячейка будет окрашена.Я знаю, что получение значения само по себе ничего не делает, я просто использовал это, чтобы установить точку останова.Однако, если я снимаю точку останова, но оставляю код;оно работает.Я озадачен тем, что, черт возьми, происходит ...

У кого-нибудь есть идеи?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Оказывается, все работало нормально.Я перезапустил свой компьютер и снова запустил проект без «кода отладки», и он работал отлично.Должно быть, в ОС что-то вызывало проблемы.

0 голосов
/ 21 ноября 2018

Я думаю, что если вы прокомментируете свою строку rr.nColumn = 2, код будет интерпретирован как

if (rr.nRow == 1 && rr.nColumn == 2)
{
    if (rr.nColumn == -1)
        dgvResults.Rows[rr.nRow].DefaultCellStyle.BackColor = Color.Yellow;
    else
        dgvResults.Rows[rr.nRow].Cells[rr.nColumn].Style.BackColor = Color.Salmon;
}

, и тогда BackColor на [1,2] не будет установлен должным образом.

@ DaBlue, как вы говорите в комментариях, нет мой код не интерпретируется, как это, пожалуйста, попробуйте следующее

if (false)
    MessageBox.Show("1");  // If I leave this in it works, if I remove it the single cell is not colored
if (true)
    MessageBox.Show("2");
else
    MessageBox.Show("3");

В этом случае будет показано «2», а затем попробуйте следующий код

if (false)
    //MessageBox.Show("1");  // If I leave this in it works, if I remove it the single cell is not colored
if (true)
    MessageBox.Show("2");
else
    MessageBox.Show("3");

на этот раз вы не увидите всплывающее окно

ИМХО, вы всегда должны использовать фигурные скобки, даже если это «одна строка»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...