winforms 如果列1包含一个“Aborted”字符串,如何更改datagridview中某行的背景颜色?

tez616oj  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(177)

你好,斯塔克的人们,
我正在构建一个图形用户界面,在这个图形用户界面中,我有一个显示数据库中数据的DataGridView。然而,我正在寻找一种方法,当一行的第一列包含字符串“Aborted”时,将整行的颜色更改为红色。
我已经尝试找到一个解决方案,但所有的例子都是整数而不是字符串的条件。

这是我当前的着色代码:

private void datagridview1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.ColumnIndex == 1 && e.Value as string == "Aborted")
    {
        var style = datagridview1.Rows[e.RowIndex].DefaultCellStyle;
        style.BackColor = Color.Red;
        style.ForeColor = Color.White;
    }
}

但是,这不会更改包含值Aborted的列或整行的颜色,甚至也不会给予错误消息...
即使在CellFormatting旁边的datagridview1的事件属性中,它也显示datagridview1_CellFormatting,因此它肯定绑定到datagridview。

屏幕截图Events Properties of the datagridview1
数据网格视图的屏幕截图enter image description here

有没有人有办法解决这个问题?我完全不知道出了什么问题。
编辑:错误Error of @Jimi's example的快速屏幕截图

sy5wg1nm

sy5wg1nm1#

您正在操作错误的样式对象。请尝试以下操作:

private void datagridview1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.ColumnIndex == 1 && e.Value as string == "Aborted")
    {
        e.CellStyle.BackColor = Color.Red;
        e.CellStyle.ForeColor = Color.White;
    }
}
ih99xse1

ih99xse12#

奥利弗的解决方案非常适用于只为“Aborted”列着色的情况,但是为整行着色的解决方案如下(非常感谢Reddit的u/JTarsier

// Use the event CellFormatting from Datagridview > Properties > Events
private void datagridview1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    // Use this one liner to check which number is associated with which column
    //(so you don't make the mistake of trying to use the wrong column like me ._.)
    
    // Debug.WriteLine($"{e.ColumnIndex} : '{e.Value}'");
    if (e.ColumnIndex == 0 && e.Value as string == "Aborted")
    {
        var style = datagridview1.Rows[e.RowIndex].DefaultCellStyle;
        style.BackColor = Color.Red;
        style.ForeColor = Color.White;
    }
}

谢谢你的帮助!

相关问题