我想在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;
}
}
答案 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);
}
您不应该将True
和False
仅用于普通CheckBoxes
。如果您将复选框设置为允许第三种状态(ThreeState = true
),则将分别为Checked
,Unchecked
和Indeterminate
。