Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Блокировка ячейки таблицы  [new]
Mishel
Member

Откуда:
Сообщений: 19
Уважаемые программисты
У меня возникла ситуация: в столбец Грида я вставил CheckBox. Все работает нормально, но иногда возникает ситуация, когда пользователь не должен иметь возможность переключить CheckBox какой-либо строки, например по какому-то условию. Пробовал задействовать Enabled, при этом блокируется весь столбец. Как заблокировать строку? (VFP 3.0)

Заранее спасибо

С уважением
Михаил
5 сен 03, 16:20    [328135]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка ячейки таблицы  [new]
Crip
Member

Откуда:
Сообщений: 2490
А что Valid уже не устраивает?
5 сен 03, 16:38    [328178]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка ячейки таблицы  [new]
Alexander Korolev
Member

Откуда:
Сообщений: 1
Еще можно в столбце завести два CheckBox - Enabled и Disabled. Переключать по DynamicCurrentControl
5 сен 03, 16:54    [328221]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка ячейки таблицы  [new]
Mishel
Member

Откуда:
Сообщений: 19
Прошу прощенья за поздний ответ - выходные.
Кстати VALID-ом я и пользовался. Вкратце о сути: мой проект работает в реальном режиме времени. Пришел человек - оператор фиксирует CheckBox-ом это событие. Далее человеку дается задание и он выполняет. Это фиксируется в другой таблице, а оператор не должен случайно выключить его из списка пришедших. Для этого в таблице людей ставится метка о том , что он работает в столбце fio.work

В начале у меня был такие строки на Valid CheckBox-а, который связан с логическим полем присутствие человека

if fio.work
return
endif

Система работала нормально, но CheckBox ПЕРЕКЛЮЧАЛСЯ. Поскольку я первоначально считал, что CheckBox и поле Fio.prixod тесно связаны, и значение таблицы меняются, поэтому я ввел новую строку

if fio.work
replace fio.prixod with .t.
return
endif

Все равно CheckBox переключался. (Профессионалы наверно сразу заметят ошибку).
После долгих размышлений я сделал открытие (прошу не смеяться, мне никто не подсказывал, а если где я ошибся - пусть поправят):
Связь объекта с переменной памяти (поле таблицы и др) ОДНОСТОРОННЯЯ. Т.е. смена состояния объекта (CheckBox и др) приводит к смене значения переменной, но программное изменение переменной на связанный объект никак не влияет. Приходится вручную изменять этот объект, вписывая параметры в их Value или рефрешируя. После чего строки стали такими:
if fio.work
replace fio.prixod with .t.
thisform.grid1.column5.check1.value = 1
return
endif

Конечно, на блокировку строки это не похоже, скорей всего это самовосстановление, но для пользователя этого достаточно.
Но вопрос остается открытым - как заблокировать строку таблицы?
(Статья ВладимираМ о Grid мне известна)

Спасибо, что прочитали.
С уважением
Михаил
7 сен 03, 14:21    [328962]     Ответить | Цитировать Сообщить модератору
 Re: Блокировка ячейки таблицы  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Вообще-то о Grid я не писал. Скорее всего речь идет о статье Влада Гринчишина.

А в Вашем случае попробуйте запретить вход в столбец с ChekBox написав условие в WHEN этого объекта:

IF <Условие запрета модификации>
RETURN .F.
ENDIF

Такое условие записанное на сам объект CheckBox позволит сделать динамический запрет на модификацию в зависимости от содержимого строки.

Насчет взаимосвязи отображаемых объектов и ControlSource Вы не правы. Связь двухсторонняя. Просто объект CheckBox в этом смысле очень специфичен. Если есть возможность, лучше заменить его на ComboBox с двумя значениями "Да"/"Нет". В нужном Вам смысле ComboBox более управляем.
8 сен 03, 12:11    [329529]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить