Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Datagridview绘制问题_C#_Winforms - Fatal编程技术网

C# Datagridview绘制问题

C# Datagridview绘制问题,c#,winforms,C#,Winforms,我有一个datagridview,在其中我处理来自datatable的数据。然后更改问题字段的颜色。我通过ProgressChanged事件来实现这一点。代码如下: private void bgwCompare_ProgressChanged(object sender, ProgressChangedEventArgs e) { ReportRow rr = (ReportRow)e.UserState; if (rr.nRow == 1 &a

我有一个datagridview,在其中我处理来自datatable的数据。然后更改问题字段的颜色。我通过ProgressChanged事件来实现这一点。代码如下:

    private void bgwCompare_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        ReportRow rr = (ReportRow)e.UserState;
        if (rr.nRow == 1 && rr.nColumn == 2)
            rr.nColumn = 2;  // If I leave this in it works, if I remove it the single cell is not colored
        if (rr.nColumn == -1)
            dgvResults.Rows[rr.nRow].DefaultCellStyle.BackColor = Color.Yellow;
        else
            dgvResults.Rows[rr.nRow].Cells[rr.nColumn].Style.BackColor = Color.Salmon;


    }
这是。。。真奇怪。。。我似乎只有1000多条记录中的一个单元格有问题

如果我试着看手机设置好,它就会工作。(请参见上面的代码rr.nRow==1和&rr.nColumn==2)

如果我将代码注释掉,单元格就不会被绘制。如果我把代码留在里面,细胞就会被涂上油漆。我知道设置为自身的值没有任何作用,我只是用它来设置一个断点。但是,如果我去掉断点,但将代码保留在断点上;它起作用了。我对到底发生了什么感到困惑


有人有什么想法吗?

我想如果你把你的行注释掉,代码就会被解释为

if (rr.nRow == 1 && rr.nColumn == 2)
{
    if (rr.nColumn == -1)
        dgvResults.Rows[rr.nRow].DefaultCellStyle.BackColor = Color.Yellow;
    else
        dgvResults.Rows[rr.nRow].Cells[rr.nColumn].Style.BackColor = Color.Salmon;
}
然后[1,2]上的背景色未按预期设置

@DaBlue正如您在评论中所说的“不,我的代码不是这样解释的”,请尝试以下操作

if (false)
    MessageBox.Show("1");  // If I leave this in it works, if I remove it the single cell is not colored
if (true)
    MessageBox.Show("2");
else
    MessageBox.Show("3");
在这种情况下,将显示“2”,然后尝试以下代码

if (false)
    //MessageBox.Show("1");  // If I leave this in it works, if I remove it the single cell is not colored
if (true)
    MessageBox.Show("2");
else
    MessageBox.Show("3");
这次你不会看到任何弹出窗口


我想你应该一直使用花括号,即使它是“一行线”

证明它工作正常。我重新启动了我的计算机,并在没有“调试代码”的情况下重新运行了这个项目,它工作得非常好。操作系统中一定有什么东西导致了问题。

该“一行程序”仅用于调试,并将变量设置为与实际值相同的值。正如我提到的(具有讽刺意味的是),这一行使它起作用。这一行仅用于调试目的,这样我就可以在DGV中数据出现问题的地方设置断点,这样我就可以看到它在代码中出现。不,它不会像上面那样被解释。关于如何解释代码以及如何始终使用大括号,DaBlue说得对。尤其是关于总是使用大括号,LOLI编写c/c++/c#已经40年了。编译并运行它,您将看到它确实有效。最佳实践一直是一行没有大括号,多次使用大括号。