阻止用户更改DataGridView中的编程选择

时间:2017-08-16 12:15:15

标签: vb.net winforms datagridview

我有一个DataGridView,根据通过其他控件设置的过滤器来选择/取消选择行。这种选择只是程序化的。如何阻止用户更改这些选择?

2 个答案:

答案 0 :(得分:1)

我想通过告诉你保留DataGridView1.Enabled = False来回答,这可能会根据你的需要而有效,但你可能会失去一些视觉效果(比如灰色DataGridView)。

设置DataGridView1.ReadOnly = True也无济于事。

所以下面的代码不是一个完美的解决方案,但更像是一个解决方法来获得你想要的(现在测试和完全工作):

Dim SelectedRows As List(Of DataGridViewRow) = New List(Of DataGridViewRow)

Private Sub DataGridView1_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseDown

    For Each Rows As DataGridViewRow In DataGridView1.SelectedRows
        SelectedRows.Add(Rows)      'Add all the rows pre-defined by your code
    Next

End Sub

Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick

    DataGridView1.ClearSelection()  'clear the selection
    For Each rs As DataGridViewRow In SelectedRows
        rs.Selected = True          'restore the previous selected rows
    Next

End Sub

Private Sub DataGridView1_RowHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.RowHeaderMouseClick

    DataGridView1.ClearSelection()  'clear the selection
    For Each rs As DataGridViewRow In SelectedRows
        rs.Selected = True          'restore the previous selected rows
    Next

End Sub

答案 1 :(得分:0)

我不确定是否可以(没有自定义DataGridView)使其保持启用状态(以便查看选择)并避免允许用户选择行。 但是,您可以存储您的选择,即列表(int16)并处理CellClick等事件并重新读取,并且每次用户在DataGridView中单击时,重置列表中的选择。希望它对用户来说甚至不会引起注意,但无论哪种方式都不允许他修改选择。