我们如何阻止用户取消选中DataGridView复选框?

时间:2010-02-15 10:31:34

标签: winforms data-binding datagridview checkbox

我们有一个DataGridViewCheckBox列绑定到我们类中的布尔属性。

属性设置器有一些逻辑,表示在某些条件下,True标志不能更改,即它永远保持检查状态。这是基于每个记录。所以整个列不能只读,只能是某些行。

伪代码:

Public Property Foo() As Boolean
    Get
       Return _Foo
    End Get
    Set(ByVal value As Boolean)
        If _Foo And Bar And value = False Then
            //do nothing, in this scenario once you're true, you stay true
        Else
            _Foo = value
        End If
    End Set
End Property

数据绑定处理所有这些都很好,除了单击复选框时可以清除它。然后,当然,当绑定/ setter被触发时(当你离开那个单元格时),它会根据底层逻辑恢复到其检查状态。最终它并不重要,但它是一个笨拙的用户界面。

我们如何拦截用户的点击并对其进行检查?

2 个答案:

答案 0 :(得分:1)

我认为他正在询问如何“有条件地”阻止它被取消选中...而不是如何以编程方式停止所有取消选中,因为您的示例已经显示

您要做的是使用CellFormatting和CellContentClick事件。

在CellFormatting中,您希望将包含所选项目的单元格设为只读,这将阻止您“取消选中”它。然后,您要检查CellContentClick中的当前单元格是否为true。如果是,那么您刚刚将此单元格更改为新的选中框,因此请循环显示每一行,将其他行关闭。

答案 1 :(得分:0)

这可以胜任,但有更优雅的解决方案吗?

Private Sub Grid1ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Grid1.CellClick

    //allow checking, but don't allow unchecking
    If Grid1.Columns("myColumn").Index = e.ColumnIndex Then
        Dim chkbox As DataGridViewCheckBoxCell = Grid1.CurrentCell
        chkbox.ReadOnly = True
        chkbox.Value = True
    End If

End Sub