使用背景色将当前行的数据网格视图单元格与 vb net 中上一行的单元格进行比较



我正在制定一个顺序储罐填充计划。

我使用数据网格视图。在以下代码的第 (2( 部分中,每行表示一个序列,每个行单元格(从行中的第四个单元格开始(表示特定罐中的液体体积。如果通过将当前行单元格与上一行的单元格进行比较来显示音量增加了,我希望单元格背景颜色变为绿色,如果减少,则为黄色,如果没有变化,则颜色保持白色。

单击TkFil按钮时,单元格从计算结果中接收数据。

我面临的问题是,该行的前四个或八个单元格以随机顺序获取颜色,而后面的所有单元格都很好。我根本无法理解并需要一些帮助:为什么着色不起作用?

这是我的完整代码:

Private Sub btnTkFil_Click(sender As System.Object, e As System.EventArgs) Handles btnTkFil.Click
If Form36 Is Nothing Then
MessageBox.Show("Please first open the Ballast Plan form")
Else
'PART(1)
Form36.dgv1.CurrentRow.Cells(0).Value = Form1.txtCondition.Text.ToString
Form36.dgv1.CurrentRow.Cells(1).Value = Val(Form1.txtAftDft.Text)
Form36.dgv1.CurrentRow.Cells(2).Value = Val(Form1.txtForeDft.Text)
Form36.dgv1.CurrentRow.Cells(3).Value = Val(tbGm1.Text)
Try
For i As Integer = 4 To CInt(Val(Form32.tbNbBox.Text) + 3)
'For j As Integer = 0 To CInt(Val(Form32.tbNbBox.Text) - 1)
For j As Integer = 0 To Form31.DataGridView1.Rows.Count - 1
For n As Integer = 0 To CInt(Val(Form32.tbNbBox.Text) - 1) Step +1
Form36.dgv1.Columns(i).Name = CStr(Form31.DataGridView1.Rows(j).Cells(0).Value)         ' noms blst tks
Form36.dgv1.Rows(0).Cells(i).Value = CStr(Form31.DataGridView1.Rows(j).Cells(1).Value)  'tank capa
If Form36.rBtn1.Checked = True And Form36.rBtn2.Checked = False Then
Colb(n).Text = CStr(Form31.DataGridView1.Rows(j).Cells(3).Value)                          'passe aux boxes "t" les valeurs seules reçues dans Form31.dgv et retranscrites dans GBox1.textbox en %
Form36.dgv1.CurrentRow.Cells(i).Value = Format(Val(Colb(n).Text), "0") & "%"
End If
If Form36.rBtn1.Checked = False And Form36.rBtn2.Checked = True Then
Colb(n).Text = CStr(CDbl(Form31.DataGridView1.Rows(j).Cells(1).Value) * CDbl(Form31.DataGridView1.Rows(j).Cells(3).Value) / 100)
Form36.dgv1.CurrentRow.Cells(i).Value = Format(Val(Colb(n).Text), "0")
End If
i += 1
j += 1
Next
Next
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
'PART(2)
Try
For i As Integer = 4 To CInt(Val(Form32.tbNbBox.Text) + 3)
For j As Integer = 2 To Form36.dgv1.Rows.Count - 2
Dim a As String = CStr(Form36.dgv1.Rows(j).Cells(i).Value)
Dim b As String = CStr(Form36.dgv1.Rows(j - 1).Cells(i).Value)
If a > b Then
Form36.dgv1.Rows(j).Cells(i).Style.BackColor = Color.PaleGreen
ElseIf a < b Then
Form36.dgv1.Rows(j).Cells(i).Style.BackColor = Color.Yellow
ElseIf a = b Then
Form36.dgv1.Rows(j).Cells(i).Style.BackColor = Color.White
End If
Next
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
End Sub

你正在使用字符串来比较应该是数字的内容。这可能会导致意外结果,例如 8 <10 但"8">"10">

你只需要修改 PART(2( 中的代码

Dim a As Double = CDbl(Form36.dgv1.Rows(j).Cells(i).Value)
Dim b As Double = CDbl(Form36.dgv1.Rows(j - 1).Cells(i).Value)

最新更新