C# Datagridview绘制问题
我有一个datagridview,在其中我处理来自datatable的数据。然后更改问题字段的颜色。我通过ProgressChanged事件来实现这一点。代码如下: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
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年了。编译并运行它,您将看到它确实有效。最佳实践一直是一行没有大括号,多次使用大括号。