C#Winforms DatagridView命名列中负单元格的条件颜色

C#Winforms DatagridView命名列中负单元格的条件颜色,c#,winforms,datagridview,C#,Winforms,Datagridview,在网络上,关于这个话题有很多事情和它们的相反之处 我有一个datagridview,我只想在名为“YTD”的特定列的单元格值函数中应用一个绿色/红色的前景色。 这是我的密码: dataGridViewEquity.Columns["YTD"].DefaultCellStyle.Format = "[Green]0.00;[Red]-0.00;[Blue]zero"; 更新 下面是我尝试构建的事件处理程序的第一部分: public void DataGri

在网络上,关于这个话题有很多事情和它们的相反之处

我有一个datagridview,我只想在名为“YTD”的特定列的单元格值函数中应用一个绿色/红色的前景色。 这是我的密码:

dataGridViewEquity.Columns["YTD"].DefaultCellStyle.Format = "[Green]0.00;[Red]-0.00;[Blue]zero";
更新

下面是我尝试构建的事件处理程序的第一部分:

public void DataGridViewEquity_CellFormatting(object sender,DataGridViewCellFormattingEventArgs e)
    {

        if (dataGridViewEquity.Columns[e.ColumnIndex].Name.Equals("YTD"))
        {
            Decimal intValue;
            if (intValue < 0)
            {
                e.CellStyle.ForeColor = Color.Red;
            }
        }

    }
不要用红色的-3,90

试试这样:

您必须添加一些检查:

  • 当前行索引为
    =0
    ,而不是
    [DataGridView]。NewRowIndex
    :如果在不满足这些条件时尝试设置单元格值,则会出现异常(此处可能不需要行索引检查,我们还是添加它)

  • 因为您有一个数据源,所以还要同时检查
    null
    DBNull.Value
    :在这种情况下,如果您尝试强制转换单元格值,则会出现异常(当然,没有要格式化的内容)


您还应该将
YTD
列的格式设置为小数点后2位,以防您还没有这样做。在设置了
DataGridViewEquity.DataSource
之后添加此选项:

DataGridViewEquity.Columns["YTD"].DefaultCellStyle.Format = "N2";

非常感谢,我现在更明白了!有一件事让我觉得很奇怪:DatagridView[“column”,e.RowIndex]。但我认为这与我巴雷尔处理“e”这个事实有关,我看不出这个“e”背后的价值。这导致我理解您的逻辑和您提出的算法,但我不知道如何触发此DataGridViewEquity\u事件。非常感谢!我现在更明白了!事实上,由于某种原因,事件没有被引用,我需要在表单中直接引用它
private void DataGridViewEquity_CellFormatting(object sender, DataGridViewCellFormattingEventArgs  e)
{
    var dgv = sender as DataGridView;
    if (e.RowIndex < 0 || e.RowIndex == dgv.NewRowIndex) return;

    var cell = dgv["YTD", e.RowIndex];
    if (cell.Value == null || cell.Value == DBNull.Value) return;

    decimal value = (decimal)cell.Value;
    cell.Style.ForeColor = value == 0 ? Color.Blue : value < 0 ? Color.Red : Color.Green;
}
var value = (dynamic)cell.Value;
DataGridViewEquity.Columns["YTD"].DefaultCellStyle.Format = "N2";