Как мы можем заблокировать пользователя от снятия флажка DataGridView? - PullRequest
0 голосов
/ 15 февраля 2010

У нас есть столбец 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

Привязка данных обрабатывает все это прекрасно, за исключением того, что флажок визуально снимается при нажатии. Затем, конечно, когда привязка / установщик срабатывает (когда вы покидаете эту ячейку), она восстанавливается до своего проверенного состояния в соответствии с базовой логикой. В конечном счете, это не имеет большого значения, но это неуклюжий пользовательский интерфейс.

Как мы можем перехватить щелчок пользователя и сохранить его проверенным?

Ответы [ 2 ]

1 голос
/ 20 августа 2012

Я думаю, что он спрашивает, как "условно" остановить его не проверять ... а не как программно остановить ВСЕ отмены проверки, как показано в вашем примере

Что вы хотите сделать, это использоватьСобытия CellFormatting и CellContentClick.

В CellFormatting вы хотите, чтобы ячейка, содержащая выбранный элемент, была доступна только для чтения, это помешает вам "снять отметку" с нее.Затем вы хотите проверить, является ли текущая ячейка в CellContentClick истинной.Если это так, то вы только что изменили эту ячейку, чтобы она стала новым флажком, поэтому циклически перебирайте все строки, отключая остальные.

0 голосов
/ 16 февраля 2010

Это делает работу, но есть ли более элегантные решения?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...