CellFormating事件:更改Font行的行为类似于循环

时间:2019-03-25 16:06:36

标签: c# datagridview

我想在DGV中将特定行的字体更改为粗体,其中列中有“ false”值(名称“ 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 :(得分:0)

这应该更好地工作:

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 *(,并且我只将当前格式化单元格的样式更改为recommended

在测试单元格的值之前,我还要检查null并重置字体。

(*)由于某种原因,这似乎与您看到的连续重绘有所不同。

如果您的单元格是Checkbox单元格,则还应该编写以下事件代码:

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

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

您不应该将TrueFalse仅用于普通CheckBoxes。如果您将复选框设置为允许第三种状态(ThreeState = true),则将分别为CheckedUncheckedIndeterminate