【问题标题】:C# Winforms DatagridView conditional color for negative cell in named columnC# Winforms DatagridView 命名列中负单元格的条件颜色
【发布时间】:2020-11-25 14:33:17
【问题描述】:

在网络上,有很多事情与主题相反。

我有一个 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;
            }
        }

    }

输出:

[Red]-3,90

而不是红色的 -3,90

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    试试这样:

    你必须添加一些检查:

    • 当前Row Index是&gt;= 0而不是[DataGridView].NewRowIndex:如果你在这些条件不满足的情况下尝试设置一个Cell值,你会得到一个异常(这里的Row Index检查可能不需要,我们添加它无论如何)。

    • 由于您有一个 DataSource,因此还要检查 nullDBNull.Value:如果您在这种情况下尝试强制转换 Cell 值,则会出现异常(当然没有要格式化的内容)。


    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;
    

    您还应该将YTD 列的格式设置为小数点后两位,以防您尚未这样做。在设置 DataGridViewEquity.DataSource 后立即添加:

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

    【讨论】:

    • 非常感谢,我现在明白了!一件事情对我来说很奇怪:DatagridView [“column”,e.RowIndex]。但我认为这与我几乎不处理 "e" 的事实有关,我看不出这个 "e" 背后的价值。这导致我理解你的逻辑和你提出的算法,但我不知道如何触发这个 DataGridViewEquity_CellFormatting 事件
    • 非常感谢!我现在更明白了!事实上,由于某种原因,该事件没有被订阅,我需要直接在表单中订阅它
    猜你喜欢
    • 2017-07-03
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多