2017-01-15 27 views
0

詳細ビューと一般ビューの間で変更したいDataGridViewを持つVB.Netフォームがあります。ルート脚データと呼ばれ、私は一般的と詳細ビューの間で選択するために、チェックボックスを実装しているアングルRowCount/Rows.Countが変更されたDataGridViewをループする方法

と呼ばれている -

DataGridViewのは、場所の間の距離と推定された時間を示しています。チェックボックスをオンにすると、すべてのルートレッグエントリをループし、ルートエントリの詳細情報であるルートステップを挿入しようとしています。

私はさまざまなループオプションを試しました:For..Next、For Each ... Next ... while ... End While、そして最初の行(Route Leg)だけが処理されます。さらに5つのRoute Legエントリ。

重要:詳細ビューを選択すると、挿入される新しいルートステップエントリごとにDataGridView行カウントが増分されることに注意してください。

私はdgv.RowCountとdgv.Rows.Countの両方を使用しようとしましたが、同じ結果が得られます。

達成しようとしていることを示すためにいくつかのコードを追加しました。どんな助けや指導も大歓迎です。

'Show/Hide Route Step Data 
Private Sub chkShowRouteStep_CheckedChanged(sender As Object, e As EventArgs) Handles chkShowRouteStep.CheckedChanged 
    Try 
     If chkShowRouteStep.Checked Then 
      'Show Route Steps 
      For i As Integer = 0 To dgvQuote.RowCount - 1 
       txtRowCount.Text = i 
       If dgvQuote.Rows(i).Cells(0).Value.ToString <> "" Then 
        For j As Integer = 1 To 5 
         i += 1 
         dgvQuote.Rows.Insert(i, "Step") 
         'dgvQuote.Rows.Insert(j + i, "Step") 

        Next 
       End If 
      Next 

     Else 
      'Hide Route Steps - WORKS GREAT 
      For i As Integer = dgvQuote.RowCount - 1 To 0 Step -1 
       If dgvQuote.Rows(i).Cells(0).Value.ToString = "Step" Then 
        dgvQuote.Rows.RemoveAt(i) 
       End If 
      Next 
     End If 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
End Sub 

答えて

1

私の焦燥感と再フォーカスは私に答えを与えました。

私の焦点は、コントロールに含まれる行の数に関するDataGridViewとそのフィードバックに常に焦点を当てました。

ただし、ループを実行すると、ループ実行の開始時に行数のスナップショットが作成され、行がDataGridViewに追加されるたびに更新されませんでした。

現在のループ番号(i + = 1)とDataGridView(dgv.Rows.Count - 1)の現在の行数を比較して、行数の再確認を強制する別のアプローチを採用しました。つまり、DataGridViewに追加された新しい行はすべてカウントされます。

DataGridViewの最後の行に到達したときにtrueに設定されるトリガーが追加されました(While/End) whileループは終了しました。

'Show/Hide Route Step Data 
Private Sub chkShowRouteStep_CheckedChanged(sender As Object, e As EventArgs) Handles chkShowRouteStep.CheckedChanged 
    Try 
     Dim lastRow As Boolean = False 'This will get set when we have reached the last row in the DGV 
     Dim i As Integer = 0 

     If chkShowRouteStep.Checked Then 
      'Show Route Steps 
      While lastRow <> True 

       txtRowCount.Text = i 

       If dgvQuote.Rows(i).Cells(0).Value.ToString <> "" Then 

        For j As Integer = 1 To 2 
         'i += 1 
         dgvQuote.Rows.Insert(i + j, "", "Step") 

        Next 

       End If 
       'Check to see if we have reached the last row, set lastRow to TRUE if it is the last row 

       If i = dgvQuote.Rows.Count - 1 Then 
        lastRow = True 
       End If 

       i += 1 

      End While 

     Else 
      'Hide Route Steps - WORKS GREAT 
      For x As Integer = dgvQuote.RowCount - 1 To 0 Step -1 
       If dgvQuote.Rows(x).Cells(1).Value.ToString = "Step" Then 
        dgvQuote.Rows.RemoveAt(x) 
       End If 
      Next 
     End If 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
End Sub 

結果は以下のようであり、エラーフリー:

enter image description here

enter image description here

0

コード内のコメントから、ルートステップが隠れていると言われているので、それだけではどうですか。行を削除して挿入する代わりに、グリッドにすべてを埋め込み、チェックボックスを使用して行を設定します。

+0

た後、私はショーや詳細を隠すのいずれかの横にあるチェックボックスを使用します。さらに、レッグデータを取得する間に、ステップデータも表示する必要はありません。さらに、レッグには最大50ステップまでのステップが含まれているため、ステップデータで表示が乱雑になります。 –

関連する問題