私は順次タンク充填計画を作成中です。バックカラーを使用して、現在の行のdatagridviewセルとvbネットの前の行のデータグリッドビューを比較します
私はdatagridviewを使用します。次のコードのパート(2)では、各行はシーケンスを表し、各行セル(行の4番目から始まる)は、特定のタンク内の液体の体積を表します。現在の行セルとボリュームが増加している前の行のセルとを比較して表示される場合は、セルのバックカラーを緑にし、黄色にし、変更しない場合は白を残します。
セルは、TkFilボタンをクリックすると計算結果からデータを受け取ります。
私が直面している問題は、行の最初の4つまたは8つのセルが無作為な順序で色を取得し、残りのすべてが正常であるということです。私は単に理解することができず、助けが必要です。なぜ、色付けがうまくいかないのですか?
これは私の完全なコードです:
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
1に(2)の部分にコードを変更する必要がある「8」>「10」
)コードがされていない、予期しない結果につながることができますそれは偽の ">"文字があるため、電子メールからコピーされたようなものです。もう一度お試しください。今回はVisual Studioからコードをコピーしてください。 2) 'for n = ... 'ループに' i + = 1'と 'j + = 1'があってはならないと思う。 –
@Andrew Morton:(1)申し訳ありませんが、フォーマットが正しくなったことを願っています。 (2)3つの異なるループがあります。iの場合、For jの場合、nの場合。私は最初の2つを削除する場合、私はちょうど全体の行全体の最後のセルの値を取得します。 – Dom
数字を比較するために文字列を使用しています。予期しない結果につながる可能性があります。 'Dim a As Double = CDbl(Form36.dgv1.Rows(j).Cells(i).Value)'と 'Dim b As Double = CDbl(Form36.dgv1.Rows(j-1).Cells()私は。値) 'それは働くのですか? –