更改单元格值为0的每一行的文本颜色?

时间:2013-11-04 22:37:12

标签: c# winforms datagridview

我目前正在这样做:

    private void dgResults_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        // Would be nice if we could do this on databind of each row instead and avoid looping
        for (int r = 0; r < dgResults.Rows.Count; r++)
        {
            if (dgResults.Rows[r].Cells[5].Value.ToString() == "0")
            {
                for (int c = 0; c < dgResults.Rows[r].Cells.Count; c++)
                {
                    dgResults.Rows[r].Cells[c].Style.ForeColor = Color.White;
                }
            }
        }
    }

但由于某种原因,它总是错过第一排。有更好的方法吗?

4 个答案:

答案 0 :(得分:1)

  

由于某种原因,它总是错过了第一行

我不知道为什么(你的代码看似正确)。如果您想避免循环,可以使用CellFormatting事件。

private void dgResults_CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
{
    if (dgResults.Rows[e.RowIndex].Cells[5].Value.ToString() == "0")
    {
        dgResults.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.ForeColor = Color.White;
    }
}

答案 1 :(得分:1)

您不需要内部循环来为一行中的每个单元格设置样式,而是可以使用DefaultCellStyle.ForeColor属性来设置整行的样式。

试试此代码

private void dgResults_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        // Would be nice if we could do this on databind of each row instead and avoid looping
        for (DataGridViewRow row in dgResults.Rows)
        {
            if (row.Cells[5].Value.ToString() == "0")
            {
               row.DefaultCellStyle.ForeColor = Color.White;                
            }
        }
    }

答案 2 :(得分:0)

这是因为第一行被选中了。

    public TransparentDataGridView()
    {
        this.SelectionChanged += TransparentDataGridView_SelectionChanged;
    }

    void TransparentDataGridView_SelectionChanged(object sender, EventArgs e)
    {
        ClearSelection();
    }

修复它。

答案 3 :(得分:0)

编辑:

try
{
    foreach (DataGridViewRow dgvc in dgResults.Rows.Cast<DataGridViewRow>().Where(g => g.Cells[5].Value.ToString() == "0"))
    {
        dgvc.DefaultCellStyle.ForeColor = Color.White;
    }
}
catch (Exception)
{

}