我有一个用从几个表中提取的数据填充的DataGridView (我使用的是SQLite,但我不认为这与这里相关)。列(11)中的一列可以具有值或可以为空。如果有值,我想将行显示为绿色,如果没有值,则不执行任何操作。我在CellFormatting中使用了以下代码来执行此操作:
private void dgv_CellFormatting(Object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 11)
{
if (!String.IsNullOrEmpty(dgv.Rows[e.RowIndex].Cells[11].Value.ToString()))
{
dgv.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Green;
}
}
}
如果第一行的第11列中没有值,则此方法非常有效,但如果有,则无论第11列中是否有值,整个DataGridView都将显示为绿色。
提前感谢您的帮助。
发布于 2020-07-23 09:02:29
我假设您想要的是“如果”列11中的单元格的值不为空,则将该行显示为绿色,如果列11中的单元格的值为空,则不要将其显示为绿色。
发布的代码中的问题(我明白了)是,如果单元格11中的值为空,则背景色永远不会重新设置为白色。
例如,使用发布的代码,让我们假设第0行在第11列中有一个值,它不是空的!考虑到这一点,Cell_Formatting
事件将友好地将第0行显示为绿色。现在,第0行显示为绿色,让我们单击第0行单元格11上的单元格,并“移除”单元格11中的数据,使其为空。删除单元格11中的数据后,将触发Cell_Formatting
事件。由于单元格11中的值为空,因此该行不会显示为绿色。
不幸的是,该行已经是绿色的。
这意味着每当行变为绿色时,…无论单元格11中的值是什么,它都将始终保持绿色。
下面的代码将在单元格11中的值不为空时将行颜色更改为绿色,并在单元格11中的值为空时将行颜色更改为白色。
private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
if (e.ColumnIndex == 11) {
if (!String.IsNullOrEmpty(dgv.Rows[e.RowIndex].Cells[11].Value.ToString())) {
dgv.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Green;
}
else {
dgv.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}
}
}
我希望这是有意义的。
发布于 2020-07-22 05:26:21
空条件运算符"?“在这种情况下可能会有所帮助。添加?after值(参见下面的代码片段,我已经更新了它)。
if(!String.IsNullOrEmpty(dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value?.ToString()))
{
dgv.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Green;
}
https://stackoverflow.com/questions/63022647
复制相似问题