Unselect/deselect 单击时 DataGridView 中的行

Unselect/deselect row in DataGridView on click

我正在将 VB6 代码迁移到 VB.NET,我们已经进入 VS2013 阶段,使用 .NET 4.5.2。在原始代码中,有一些 FlexGrids 允许单击 double-click 行和 selection/deselection 行删除行。我 double-click 运行良好,它删除了该行并将所有行设置为取消选择(因为 double-clicking header 单元格是 re-ordering 行并选择了一行,无需单击该行,然后删除现在选定的行)。我不知道这是否相关,但我将其包括在内以防万一。

我看过 here 但没有帮助,因为这种行为是预期的,我不知道客户是否愿意听到每个人都必须 re-trained 才能使用CTRL+click 方法取消选择。如果一定要这样,那就这样吧,但我必须努力做到这一点。

使用单元格点击事件来做这样的事情

Private Sub grdSelectedOps_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles grdSelectedOps.CellClick
    If Not grdSelectedOps(e.ColumnIndex, e.RowIndex).Selected Then
        grdSelectedOps(grdSelectedOps.CurrentCell.ColumnIndex, grdSelectedOps.CurrentCell.RowIndex).Selected = True

    Else
        grdSelectedOps(grdSelectedOps.CurrentCell.ColumnIndex, grdSelectedOps.CurrentCell.RowIndex).Selected = False
    End If
End Sub

不起作用,因为如果您单击了您选择的单元格,那么它总是会立即取消选择它。 Multi-select 已关闭。这可能吗?

您的问题在这里得到解答:

Toggle Selection in DataGrid

它是 C# 所以这里是等效的 VB.NET 代码是:

REM Keeps track of selection status
Private selectionChanged As Boolean

REM Fires Second
Private Sub dataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs)
    If Not selectionChanged Then
        dataGridView1.ClearSelection()
        selectionChanged = True
    Else
        selectionChanged = False
    End If
End Sub

REm Fires first
Private Sub dataGridView1_SelectionChanged(sender As Object, e As EventArgs)
    selectionChanged = True
End Sub

您可能希望覆盖 DataGrid 控件以在内部提供此功能,但这取决于您。