【问题标题】:DataGridView select Row ErrorDataGridView 选择行错误
【发布时间】:2013-08-01 16:42:56
【问题描述】:

我使用文本框和 DGV 构建了一个自动提示搜索。一切正常,除此之外我确实想要 2 个按钮,它们提供向上或向下移动 1 行的功能。你必须知道,当我搜索时,我将那些不包含搜索字符串的行设置为.visible = false

理论上它应该是这样工作的:

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 设置为 falsefullrowselect 设置为 true。当我手动单击一行或使用键盘选择它时,一切都会正确打印。

我做错了什么?

【问题讨论】:

    标签: .net vb.net winforms datagridview


    【解决方案1】:

    这应该可行:

    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
    

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

    【讨论】:

      猜你喜欢
      • 2020-12-20
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多