【问题标题】:How can we block the user from unchecking a DataGridView checkbox?我们如何阻止用户取消选中 DataGridView 复选框?
【发布时间】:2012-08-20 12:03:04
【问题描述】:

我们有一个 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

Databinding 可以很好地处理所有这些问题,只是在单击复选框时会明显清除该复选框。然后,当然,当绑定/设置器被触发时(当您离开该单元格时),它会根据底层逻辑恢复到其检查状态。最终它并不重要,但它是一个笨拙的用户界面。

我们如何拦截用户的点击并保持检查?

【问题讨论】:

    标签: winforms data-binding datagridview checkbox


    【解决方案1】:

    我认为他是在问如何“有条件地”阻止它被取消检查......而不是如何以编程方式阻止所有取消检查的发生,如您的示例所示

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

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

    【讨论】:

      【解决方案2】:

      这可以解决问题,但还有更优雅的解决方案吗?

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-27
        • 1970-01-01
        • 1970-01-01
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-01
        相关资源
        最近更新 更多