2017-07-04 12 views
0

私は順次タンク充填計画を作成中です。バックカラーを使用して、現在の行の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 
+0

1に(2)の部分にコードを変更する必要がある「8」>「10」

)コードがされていない、予期しない結果につながることができますそれは偽の ">"文字があるため、電子メールからコピーされたようなものです。もう一度お試しください。今回はVisual Studioからコードをコピーしてください。 2) 'for n = ... 'ループに' i + = 1'と 'j + = 1'があってはならないと思う。 –

+0

@Andrew Morton:(1)申し訳ありませんが、フォーマットが正しくなったことを願っています。 (2)3つの異なるループがあります。iの場合、For jの場合、nの場合。私は最初の2つを削除する場合、私はちょうど全体の行全体の最後のセルの値を取得します。 – Dom

+0

数字を比較するために文字列を使用しています。予期しない結果につながる可能性があります。 'Dim a As Double = CDbl(Form36.dgv1.Rows(j).Cells(i).Value)'と 'Dim b As Double = CDbl(Form36.dgv1.Rows(j-1).Cells()私は。値) 'それは働くのですか? –

答えて

0

あなたはどうあるべきかの数字を比較する文字列を使用しています。それは例えば8 < 10しかし、あなただけの

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) 
+0

目盛りは灰色のままで、クリックを受け入れません。 – Dom

+0

@Dom私はあなたが刻々と目をつける前に、24時間か48時間待たなければならないかもしれないと思う。待機時間*は、ポイントを増やすにつれて減少する可能性があります。 –

関連する問題