我有一个带有DataGridView的VB.Net表单,我希望在详细视图和一般视图之间进行更改。
DataGridView显示地点之间的距离和估计时间 - 称为路线腿数据,称为“一般视图”
我已经实现了一个CheckBox,可以在常规视图和详细视图之间进行选择。检查CheckBox时,我试图遍历所有Route Leg条目并插入Route Steps,这是有关Leg条目的详细信息。
我尝试了各种循环选项: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
答案 0 :(得分:1)
我的不耐烦以及重新聚焦为我提供了答案。
我的重点始终放在DataGridView上,以及关于控件中包含的行数的反馈。
但是,循环的执行会在循环执行开始时获取行数的快照,并且每次将行添加到DataGridView时都不会更新行数。
我采用了一种不同的方法,我将当前的循环数(i + = 1)与DataGridView中的当前行数(dgv.Rows.Count - 1)进行比较,从而强制重新检查行数。这意味着现在将计入添加到DataGridView的任何新行。
如果DataGridView中的最后一行到达并且退出了While ... End While循环,我添加了一个触发器(True / False)设置为true。
'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
结果如下并且没有错误:
答案 1 :(得分:0)
由于代码中的注释表示您要隐藏路由步骤,为什么不这样做呢?不是删除和插入行,而是使用所有内容填充网格,然后使用复选框设置行.Visible属性?