Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Блокировка на изменение строки в гриде / 16 сообщений из 16, страница 1 из 1
14.10.2004, 16:27
    #32738864
Pasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
Добрый день.

Возникла задача, и пока что не нашел решения.
Есть окно и в нем dw_master и dw_detail. Оба dw типа Grid.

Нужно, в dw_master при определенном условии не давать возможность редактировать некоторые строки. Ну для примера, строки у которых plan_date < today().

Как так сделать?
Свойство protect не предлогать - т.к. есть dw_detail, и показывать информацию обязательно. но вот исправлять нельзя.
DisplayOnly - тоже не подходит, т.к. имеются поля не типа Edit.

спасибо, Павел.
...
Рейтинг: 0 / 0
14.10.2004, 17:11
    #32738995
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
авторСвойство protect не предлогать - т.к. есть dw_detail...почему не предлагать, какая связь?

dataobject для DW_detail должен включать в себя интересующие нас с точки зрения запрещения редактирования поля мастера.

Ну, или устанавливать protect/taborder динамически на rowfocuschanged.
...
Рейтинг: 0 / 0
14.10.2004, 17:27
    #32739051
Pasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
1. Если я прописываю условие в свойстве protect, то данная строка вообще не выбирается и соответсвенно детали в dw_detail я посмотреть не могу. Такой вариант не подходит.

2. Про таб ордер. Тут толи я чето ошибаюсь толи это не возможно.
На собитие dw_master - roufocuschanged я составил условие:
If currentrow > 0 Then
is_active = This.GetItemString(currentrow, 'поле4')
If is_active = 'N' Then
This.Object.<поле1>.TabOrder = 0
cb_change.Enabled = False
dw_detail.Object.DataWindow.ReadOnly = True
Else
cb_change.Enabled = True
dw_detail.Object.DataWindow.ReadOnly = FALSE
End If
End If

Как только выполняется данное условие выскакивает ошибка
"error accesing external object property taborder"
Где я не правильно пишу изменение TabOrder?

P/s/ давно хотел спросить, как тут вставлять в сообщение часть из предыдущего сообщения.
...
Рейтинг: 0 / 0
14.10.2004, 17:45
    #32739111
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
PashaПро таб ордер. Тут толи я чето ошибаюсь толи это не возможно.
Ошибаешься. Возможно.

If currentrow > 0 Then
is_active = This.GetItemString(currentrow, 'поле4')
If is_active = 'N' Then
This.Object.<поле1>.TabOrder = 0
cb_change.Enabled = False
dw_detail.Object.DataWindow.ReadOnly = True
Else
cb_change.Enabled = True
dw_detail.Object.DataWindow.ReadOnly = FALSE
End If
End If

Как только выполняется данное условие выскакивает ошибка "error accesing external object property taborder"
Где я не правильно пишу изменение TabOrder?

Везде :). Вот так будет работать:

This.SetTabOrder(i, 0)

P/s/ давно хотел спросить, как тут вставлять в сообщение часть из предыдущего сообщения.
Слева под письмом - ссылочка "Цитировать"... делает именно то, что на ней написано... очень полезная в хозяйстве вещь :).
...
Рейтинг: 0 / 0
14.10.2004, 17:52
    #32739143
Pasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
мда TabOrder не решил проблему
как тока доходит до первогй ситуации когда выставляю 0, все дальше уже не переключится
...
Рейтинг: 0 / 0
14.10.2004, 18:10
    #32739201
Leonid_B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
Может itemChanged -> return 2 попробовать?
...
Рейтинг: 0 / 0
14.10.2004, 18:19
    #32739229
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
Pashaмда TabOrder не решил проблему
как тока доходит до первогй ситуации когда выставляю 0, все дальше уже не переключится
Что не переключается? Вообще говоря, у меня просто море ситуаций, когда есть связка из 2-3-4 DW по Master-Detail, и всё работает и при TabOrder = 0, и при Protected = 1. Так что оба эти варианта применимы.
...
Рейтинг: 0 / 0
14.10.2004, 18:43
    #32739283
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
Я так понимаю проблема в том, что если включать Protected у поля, то других разрешенных к редактированию полей нет и собственно говоря фокус на строку передать некуда ? Какие можно рассмотреть варианты:
1. Сделать в источнике данных для главного DW псевдополе, у которого всегда включен DisplayOnly
2. Обрабатывать ситуацию запрета на редактирование поля в событии dw.ItemChanged и в нужных случаях там просто запрещать изменение поля
3. Пересмотреть интерфейс формы

Я бы рекомендовал пункт 3, так как лично все эти один-ко-многим всегда более сложно программируются и тяжело воспринимаются пользователями. Лично мне всегда ближе парадигма, когда в одной форме пользователь смотрит в наглядном и удобном виде данные, а для изменения выбранных вызывается в виде модальной формы визард, в котором на страничках можно достаточно легко и красиво с точки зрения интерфейса и кода, расположить сколько угодно DW многих к одному , с детальными инструкциями к каждой страничке для пользователя, плюс без заморочек в случае использования INCREMENT полей :)
...
Рейтинг: 0 / 0
14.10.2004, 18:54
    #32739307
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
авторпочему не предлагать, какая связь?Вопрос снимается.

offtop
Какие интерфейсы народ наворачивает, потом с ними гм... мучается :-)
end offtop
...
Рейтинг: 0 / 0
14.10.2004, 19:07
    #32739332
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
PashaЕсли я прописываю условие в свойстве protect, то данная строка вообще не выбирается и соответсвенно детали в dw_detail я посмотреть не могу. Такой вариант не подходит
Сие есть ерунда. Надо правильно обрабатывать Clicked event...
...
Рейтинг: 0 / 0
15.10.2004, 08:57
    #32739641
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
2 Филипп:
Не все пользователи любят мышь.
Некоторых приложение совершенно неуправляемое с клавиатуры раздражает преизрядно.
...
Рейтинг: 0 / 0
15.10.2004, 09:31
    #32739693
Pasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
Ну начнем по порядку:

1)Leonid_B Может itemChanged -> return 2 попробовать?
У меня сейчас реализовано, так. Уже возникало пару раз вопросов от пользователей. Вот типа я менял, а ничего не изменилось. Хотя данная ситуация в инструкции описана полностью. Хотелось бы вообще не дать им изменять.

2)ASCRUS3. Пересмотреть интерфейс формы
Я бы рекомендовал пункт 3, так как лично все эти один-ко-многим всегда более сложно программируются и тяжело воспринимаются пользователями. Лично мне всегда ближе парадигма, когда в одной форме пользователь смотрит в наглядном и удобном виде данные, а для изменения выбранных вызывается в виде модальной формы визард, в котором на страничках можно достаточно легко и красиво с точки зрения интерфейса и кода, расположить сколько угодно DW многих к одному , с детальными инструкциями к каждой страничке для пользователя, плюс без заморочек в случае использования INCREMENT полей
Данный модуль, это продолжение уже внедренного прог. продукта. Который проходил все стадии разработки. Так вот -первая версия, это один грид и вызов детального модального окна для просмотра и редактирования. В некоторых местах это не применимо оказалось, т.к. пользователю нужно видеть одновременно детализацию по конкретному и некоторые "заголовки" в мастере одновременно.

3)ФилиппСие есть ерунда. Надо правильно обрабатывать Clicked event... А не затруднит указать где у меня ерунда. Protect нужно устанавливать в runtime во время выбора данной строки, которая удовлетворяет определенному условию??? Я изначально в dw в поле protect прописывал данное условие.
...
Рейтинг: 0 / 0
15.10.2004, 10:47
    #32739870
gz
gz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
Я бы сделал просто подсветку строк, которые закрыты для редактирования.
Оставил бы в ItemChanged() сообщение и return 2.
...
Рейтинг: 0 / 0
15.10.2004, 13:48
    #32740418
Pasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
gzЯ бы сделал просто подсветку строк, которые закрыты для редактирования.
Оставил бы в ItemChanged() сообщение и return 2.

Так сейчас и сделано
...
Рейтинг: 0 / 0
15.10.2004, 18:05
    #32741092
rcryo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
автор1. Если я прописываю условие в свойстве protect, то данная строка вообще не выбирается
Согласен с Филиппом. Надо в событии Clicked добавить пару строк:
Код: plaintext
1.
2.
3.
4.
// переход на указанную строку даже если поле Protect
IF row >  0  AND row <> GetRow() THEN
  SetRow(row)
END IF
Успехов!
...
Рейтинг: 0 / 0
15.10.2004, 18:46
    #32741164
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка на изменение строки в гриде
rcryo автор1. Если я прописываю условие в свойстве protect, то данная строка вообще не выбирается
Согласен с Филиппом. Надо в событии Clicked добавить пару строк:
Код: plaintext
1.
2.
3.
4.
// переход на указанную строку даже если поле Protect
IF row >  0  AND row <> GetRow() THEN
  SetRow(row)
END IF
Успехов!

a esli user iuzaet klavu ?...., pomoemu event Clicked nedostatocino budet.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Блокировка на изменение строки в гриде / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]