Могу ли я запретить пользователям выбирать строку в DGV

#c# #winforms #datagridview

#c# #winforms #datagridview

Вопрос:

У меня есть программа winform, в которой у меня есть два datagridviews. Они доступны только для чтения, поэтому пользователь не может редактировать значения, и для режима выбора установлено значение «вся строка».

Моя программа выполняет dgv шаг за шагом, выделяя текущую строку, над которой она работает. По этой причине я не хочу, чтобы пользователь мог щелкнуть строку и выбрать ее. Есть ли параметр, который я могу переключить на so this для меня?

Или я должен испачкать руки обработчиком событий SelectionChanged, который проверяет, как был изменен выбор, и восстанавливает его, если пользователь изменил выбор? Если это так, как мой обработчик событий SelectionChanged может определить, был ли выбор изменен программно или пользователем?

Ответ №1:

Если вы хотите запретить пользователю выбирать какие-либо строки, вам следует установить для свойства Enabled элемента управления значение false. Это предотвратит принятие событий мыши. (Вы можете изменить цвета элемента управления, чтобы он «выглядел» включенным, даже если он отключен.)

Если вы хотите выборочно запретить пользователям выбирать определенные строки, но разрешить им выбирать другие строки, тогда вам нужно будет создать подкласс DataGridView и переопределить некоторые вещи. (Я не думаю, что существует какое-либо событие DGV, которое позволяет предотвратить изменение строки; SelectionChanged происходит после изменения выбора, и RowEnter не может быть отменен.)

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

Комментарии:

1. Я просто хочу запретить выбор всех строк, поэтому я использую значение ‘Enabled’ равным false. Спасибо

Ответ №2:

Enabled Свойству DGV можно присвоить значение false.

Это дает желаемый эффект, и DGV не имеет такого «серого» вида, когда он не включен. Вы также сможете программно задать выбранную строку DGV.

Ответ №3:

Существует свойство, называемое «CanSelect» ..

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.canselect.aspx

Это кажется полезным..

Комментарии:

1. Похоже, это свойство, доступное только для чтения, которое только сообщает вам, можно ли выбрать элемент управления или нет (если он не виден, не включен и т.д.)