根据先前的单元格值匹配标题突出显示datagridview的特定单元格

时间:2013-12-27 06:17:02

标签: c# datagridview cell paint

我有一个奇怪的问题,希望有人可以帮助我。我有一个winform,其中包含一系列datagridviews。一组单独的编程将用户在特定dgv中选择的单元格接受,并将数据插入数据库表中。然后调用存储过程来验证表中的数据(然后执行其他操作)。如果STP发现问题,它会将它们写入错误表并向用户报告哪些列验证失败。

然后,用户可以选择查看错误日志,该日志会打开一个新表单,其中包含一个datagridview,其中填充了存储过程填充的错误表的结果。

表中的第二列存储验证失败的字段的名称。此视图中的后续列表示验证完成的源表中的每个项目,其标题值与列名称完全匹配。

我想要做的是绘制具有问题值的单元格的背景,但由于某种原因,即使列标题不匹配,其中一列也会重新绘制其所有单元格。其余细胞完美涂抹。

这对我来说可能更容易用一些视觉助手描述,但遗憾的是我没有足够的信誉点来发布任何图像= \所以,图片如果你愿意,一个datagridview有两个静态列,一个名为TableName ,另一个ErrorColumn。 ErrorColumn表示验证失败的字段名称,例如说我有两行失败,一行用于“状态”,另一行用于“描述”。将存在两行,每行具有不同的ErrorColumn值,一行具有Status,另一行具有Description。

对于第1行,ErrorColumn值为“Description”。我要做的是在该行上以红色突出显示Description列的单元格,以便于查找有问题的值。此时此工作正常,但是当呈现第2行时,其ErrorColumn值为Status,不仅该行突出显示相关Status列下的单元格,而且还突出显示Description列下的单元格。如果我有3行或4行或多行,除了实际单元格外,所有行都会突出显示“描述”列单元格。描述列单元格应仅突出显示行的ErrorColumn值是否为“描述”。

我希望我能够传达我的目标。

这是我用来履行这些职责的方法。我无法弄清楚导致我的问题的原因,或者更好的方法来实现这一目标,并希望有人能指出我正确的方向。感谢。

    private void colorErrorCells(object sender, DataGridViewCellFormattingEventArgs args)
    {
        string head = this.dataGridView1.Columns[args.ColumnIndex].HeaderText;
        if (head == dataGridView1.Rows[args.RowIndex].Cells[1].Value.ToString())
        {
            dataGridView1.Rows[args.RowIndex].Cells[args.ColumnIndex].Style.BackColor = System.Drawing.Color.Red;
        }
    }

对不起啰嗦的帖子感到抱歉!

1 个答案:

答案 0 :(得分:0)

uggg ...当你尝试在一天中编程太多小时时会发生这种情况。我只是通过在if中添加一个else子句来修复它并将backcolor设置为White ...问题解决了。很抱歉浪费任何人的时间