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

Winforms 我们如何阻止用户取消选中DataGridView复选框?,winforms,data-binding,datagridview,checkbox,Winforms,Data Binding,Datagridview,Checkbox,我们在类中有一个绑定到布尔属性的DataGridViewCheckBox列 属性设置程序有一个逻辑,即在某些条件下,真标志不能更改,即永远保持选中状态。这是以每项记录为基础的。因此,整个列不能是只读的,只能是某些行 伪代码: Public Property Foo() As Boolean Get Return _Foo End Get Set(ByVal value As Boolean) If _Foo And Bar And value

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

属性设置程序有一个逻辑,即在某些条件下,真标志不能更改,即永远保持选中状态。这是以每项记录为基础的。因此,整个列不能是只读的,只能是某些行

伪代码:

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
数据绑定正在处理所有这些问题,只是单击复选框时会明显清除复选框。当然,当绑定/设置程序被触发时(当您移出该单元时),它将根据底层逻辑恢复到其已检查状态。最终,这并不重要,但它是一个笨拙的用户界面


我们如何拦截用户的点击并保持其处于选中状态?

这可以完成任务,但还有更优雅的解决方案吗

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

我想他是在问如何“有条件地”阻止它不受控制。。。而不是如示例所示,如何以编程方式停止所有取消选中的操作

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

在CellFormatting中,如果要使包含所选项目的单元格成为只读,这将阻止您“取消选中”该单元格。然后,您需要检查CellContentClick中的当前单元格是否为true。如果是,那么您刚刚将此单元格更改为新的勾选框,因此循环遍历每一行,并关闭其他行