C#Winforms DatagridView命名列中负单元格的条件颜色
在网络上,关于这个话题有很多事情和它们的相反之处 我有一个datagridview,我只想在名为“YTD”的特定列的单元格值函数中应用一个绿色/红色的前景色。 这是我的密码: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
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";