2013-08-01 69 views
0

我使用文本框和DGV生成自动暗示搜索。一切工作正常,除此之外,我想要2个按钮,提供功能去1行上下。你必须知道,在我搜索时,我将那些不包含搜索字符串的行设置为.visible = falseDataGridView选择行错误

从理论上讲它应该像这样工作:

Private Sub tsbDown_Click(sender As Object, e As EventArgs) Handles tsbDown.Click 
    With dgvMA 
     If dgvMA.RowCount > 0 Then 
      Dim MyDesiredIndex As Integer = GetNextVisibleCell(dgvMA.CurrentRow.Index) 

      dgvMA.ClearSelection() 
      dgvMA.CurrentCell = dgvMA.Rows(MyDesiredIndex).Cells(1) 
      dgvMA.Rows(MyDesiredIndex).Selected = True 
     End If 
    End With 
End Sub 

Private Function GetNextVisibleCell(currentrow As Integer) As Integer 
    With dgvMA 
     For i = currentrow To .Rows.Count - 1 
      If .Rows(i).Visible = True Then 
       MsgBox(i & ": " & .Rows(i).Visible) 
       Return i 
       Exit For 
      End If 
     Next 

     Return currentrow 
    End With 
End Function 

但永远都不要我行被选中。 multi-select设置为falsefullrowselecttrue。当我手动点击一行或用键盘选中时,一切都打印正确。

我在做什么错?

回答

0

这应该工作:

Private Sub tsbDown_Click(sender As Object, e As EventArgs) Handles tsbDown.Click 
    With dgvMA 
     If dgvMA.RowCount > 0 And dgvMA.CurrentRow.Index + 1 < dgvMA.Rows.Count Then 
      Dim MyDesiredIndex As Integer = GetNextVisibleCell(dgvMA.CurrentRow.Index + 1) 

      dgvMA.ClearSelection() 
      dgvMA.CurrentCell = dgvMA.Rows(MyDesiredIndex).Cells(1) 
      dgvMA.Rows(MyDesiredIndex).Selected = True 
     End If 
    End With 
End Sub 

Private Sub tsbUp_Click(sender As System.Object, e As System.EventArgs) Handles tsbUp.Click 
    With dgvMA 
     If dgvMA.RowCount > 0 And dgvMA.CurrentRow.Index <> 0 Then 
      Dim MyDesiredIndex As Integer = GetNextVisibleCell(dgvMA.CurrentRow.Index - 1) 

      dgvMA.ClearSelection() 
      dgvMA.CurrentCell = dgvMA.Rows(MyDesiredIndex).Cells(1) 
      dgvMA.Rows(MyDesiredIndex).Selected = True 
     End If 
    End With 
End Sub 

Private Function GetNextVisibleCell(currentrow As Integer) As Integer 
    Dim i As Integer 
    With dgvMA 
     For i = currentrow To .Rows.Count - 1 
      If .Rows(i).Visible = True Then 
       ' MsgBox(i & ": " & .Rows(i).Visible) 
       Return i 
       Exit For 
      End If 
     Next 

     Return currentrow 
    End With 
End Function 

附:我没有检查下一个可见单元格的代码,但它看起来没问题,行选择正常工作