Событие CellFormating: изменение строки шрифта ведет себя как цикл - PullRequest
1 голос
/ 25 марта 2019

Я хочу изменить шрифт определенной строки на Bold в DGV, где в столбце есть «ложное» значение (имя «vu»).

мой код работает, но проблема в том, что строкаведет себя как петля (появляется и исчезает быстро и многократно)

 private void DGV_boiteReception_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {

                DataGridViewRow row = DGV_boiteReception.Rows[e.RowIndex];
                DataGridViewCellStyle style = new DataGridViewCellStyle();

                style.Font = new Font(DGV_boiteReception.Font, FontStyle.Bold);

                if (row.Cells["vu"].Value.ToString() == "False")
                {

                    DGV_boiteReception.Rows[e.RowIndex].DefaultCellStyle = style;

                }

        }

1 Ответ

0 голосов
/ 25 марта 2019

Это должно работать лучше:

private void dataGridView1_CellFormatting(object sender,
                                          DataGridViewCellFormattingEventArgs e)
{
    DataGridViewRow row = DGV_boiteReception.Rows[e.RowIndex];

    if (row.Cells["vu"].Value != null )
    {
        e.CellStyle.Font = new Font(DGV_boiteReception.Font,
                row.Cells[0].Value.ToString() == "False" ? 
                                                 FontStyle.Bold : FontStyle.Regular);
    }
}

Я установил только Font, а не весь Style * (и я изменяю только стиль текущей ячейки форматирования, как рекомендуется .

Перед проверкой значения ячейки я также проверяю нулевое значение и сбрасываю стиль шрифта.

(*) По какой-то причине это, по-видимому, делает различие непрерывнымперерисовать вы видели.

Если ваша клетка является Checkbox клеткой, вы должны также закодировать эти события:

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    dataGridView1.Invalidate();
}

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

И вы не могли бы это True иFalse только для обычного CheckBoxes. Если вы установите флажок для разрешения 3-го состояния (ThreeState = true), то будут Checked, Unchecked и Indeterminate.

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