单击时取消选中/取消选择DataGridView中的行

时间:2016-05-19 14:58:20

标签: vb.net datagridview vb6-migration msflexgrid

我正在将VB6代码迁移到VB.NET,我们使用.NET 4.5.2进入VS2013阶段。在原始代码中,有一些FlexGrids允许在单击时双击行删除和行选择/取消选择。我有双击正常,它删除行并将所有行设置为取消选择(因为双击标题单元格重新排序行并选择一行,而不是单击该行,然后删除现在选择了一行)。我不知道这是否相关,但我已将其包括在内以防万一。

我看了here但它没有帮助,因为这种行为是预期的,我不知道客户是否希望听到每个人都必须重新训练才能使用CTRL +点击取消选择的方法。如果它必须如此,那就这样吧,但我必须努力使这项工作。

使用单元格单击事件执行此类操作

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

不起作用,因为如果您单击了已选择它的单元格,则它会立即取消选择它。多选已关闭。这可能吗?

1 个答案:

答案 0 :(得分:2)

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

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控件以在内部提供此功能,但这取决于您。