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

Откуда: Odessa
Сообщений: 217
Вижу РВ в глаза 3-ю неделю (т.е. учусь)
пробл.: dw_1 в нем три DDDW выбор во 2-м зависит от того, что выбрано в 1-м, 3-м, - от 2-го
все данные выбираются из одной таблицы.
КАК ЭТО СДЕЛАТЬ!?!?
1 ноя 03, 14:15    [402695]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
Механик
Member

Откуда: Белгород
Сообщений: 3413
Могу посоветовать фильтровать данные... Или запрашивать новые каждый раз при выборе. Проблемма одна и та-же если показывается строка, а в данных цифра. В текущей строке надо видеть DDDW, с отобранными данными, в остальных строках надо видеть DDDW со всеми данными, иначе будут показаны цифры.

Но вообще-то это не очень хорошая идея строить интерфейс в билдере таким образом. Вынеси структуру отдельно, а данные отдельно. То есть первый DDDW в отдельное DW, в зависимости от него отбираешь второе DDDW во втором DW, в зависимости от второго отбираешь данные в третьем. Первые два для выбора, третье для записи.
1 ноя 03, 16:58    [402771]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
andy753
Member

Откуда: Moscow
Сообщений: 368
Проблема цифр легко решаема. После обновления зависимого DDDW - либо фильтром, либо файндом убедись, что текущая запись имеется. Если ее нет - очистка поля.

Это и концептуально верно. Единственный неудобств заключается, когда пользователь непреднамеренно ошибся (неверный выбор строки в родительском DDDW) - тут либо надо заново выбирать чилдренка, либо помнить его последний код до сохранения и если он существует - заново выбирать.

Мое мнение - 1 вариант нагляднее и проще. 2 - иногда требуется для особо одаренных юзеров. Выбирайте.
3 ноя 03, 10:19    [403440]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
Raven A
Member

Откуда: Moscow
Сообщений: 117
2Gosha
Если содержимое dddw_1, dddw_2, dddw_3 зависит от значения поля в ТЕКУЩЕЙ записи dw_1 и их, записей, более 1, но IMHO, задача не решаема.
Обоснование: все настроики DDDW_i от текущей записи "испортят" отображение для других записей, поскольку содержимое dddw_i ЕДИНО для всего dw_1.
Вывод: менять идеологию построения интерфейса (отказ от настраиваемых dddw).
3 ноя 03, 12:49    [403763]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
Филипп
Member

Откуда: Boston, MA, USA (c 1989 ) б. Москва
Сообщений: 1880
Ерунда какая-то. Всё это делается, существуют наработанные методы того, как это делать.
Основная идея состоит в том, что DDDW ВСЕГДА со всеми данными, а у рядов, значения которых не подходят в момент просмотра, DetailHeight делается 0.
3 ноя 03, 20:52    [404756]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
Филипп
Member

Откуда: Boston, MA, USA (c 1989 ) б. Москва
Сообщений: 1880
Вот один из вариантов, (я такой НЕ применяю), но линков на мой нет, а тут аттачментов нет...

http://www.pbdr.com/pbtips/dw/fltrdddw.htm
3 ноя 03, 22:31    [404829]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
Филипп
Member

Откуда: Boston, MA, USA (c 1989 ) б. Москва
Сообщений: 1880
Наврал, вот у Влада Ермолаева:

http://web.vrn.ru/567637/PB/DW/DW007/pbdw007.htm
3 ноя 03, 22:35    [404834]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
ЗоринАндрей
Member

Откуда: Санкт-Петербург
Сообщений: 3004
Не знаю почему Ермолаеву не нравится вариант с фильтрацией. ИМХО он работает лучше всех остальных.
Вариант с DetailHeight=0 сводит с ума scrollbar, получается некрасиво.
Вариант (скроее всего Мартина Баннистера образца 2001 года но точно не помню) использует два события pbm_dwndropdown для фильтрации и установки флажка и pbm_erasebkgnd для сброса флага и снятия фильтра.
Переход по стрелкам сделать со скроллингом к нужной строке в dddw несложно. Скроллбар при этом получается корректный, и display value отображается нормально для всех строк.

Зорин А.

"I love deadlines. I like the whooshing sound they make as they fly by."
-- Douglas Adams
4 ноя 03, 11:51    [405258]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
Филипп
Member

Откуда: Boston, MA, USA (c 1989 ) б. Москва
Сообщений: 1880
А на мой взгляд Вариант с DetailHeight работает лучше всех :-)
4 ноя 03, 18:30    [406233]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
urvas
Member

Откуда: СПб
Сообщений: 383
А что будет при этом отражаться в поле, которое DDDW, но в других строках??? Имеется в виду ситуация, когда DataColumn содержит повторяющиеся значения.
5 ноя 03, 14:54    [407492]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
Филипп
Member

Откуда: Boston, MA, USA (c 1989 ) б. Москва
Сообщений: 1880
Вариант с DetailHeight не повлияет на то, что будет отражаться в поле, которое DDDW, но в других строках...
5 ноя 03, 18:46    [407940]     Ответить | Цитировать Сообщить модератору
 Вот еще.  [new]
Антон Приходько
Member

Откуда: Russia
Сообщений: 49
Еще пару способов такие:
(Выдержка из описания с
http://www.oviont.com/detail.php?sid=66&id=55
)
Способ 1.
Идея заключается в том, чтобы успеть снять фильтр до отрисовки кодов в остальных записях. Для этого фильтр навешивается при выпадении списка, а снимается в событии DwPaint – отрисовки основного DW. u_setdddwfilter.

Способ 2.
Подключение справочника типа название-название: тогда код совпадает с названием, потому ничего не пропадает. Тогда: справочную таблицу пристегивать LEFT OUTER JOIN-ом в SQL основной, иметь кодовый столбец основной таблицы невидимым, а справочник пристегивать на Join-утый столбец справочной таблицы. Тогда можно даже не фильтровать, а заменить фильтрацию SQL-м, но тоже при выпадении списка. При выборе значения из справочника присваивать соответствующий код невидимому столбцу.

Оба реализованы в библиотеке с упомянутой ссылкой :-)))
13 ноя 03, 19:42    [417426]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
Вовик
Member

Откуда: Москва
Сообщений: 196
Я попытался реализовать способ фильтрации dddw с помощью событий pbm_dwndropdown для фильтрации и установки флажка и pbm_erasebkgnd для сброса флага и снятия фильтра.

Все работает прекрасно , только есть один нюанс. Получается не совсем красиво с высотой выпадающего списка. Есть такой параметр "Lines in Drop Down". Так вот, если dddw отфильтровать , то список с правильной длиной выпадает только если колонка с dddw теряет и снова получает фокус. Иначе , получается так, что dddw "полагает" , что записей в нем столько , сколько
было при первом retrieve() или при последнем "раскрытии".

Например , "Lines in Drop Down" = 10. При исходном retrieve() получено 30 записей в dddw. Если не фильтровать, выпадет список с 10 записями и srcollbar-ом, это правильно. Если же отфильтровать вышеуказанным способом, так, что остается например 5 записей , то выпадет список длиной в 10 позиций 5 последних из которых пустые. Если же после этого колонка потеряет и снова получит фокус, то при последующем раскрытии получаем корректный список в 5 записей.

Проблема в том , что фильтр накладывается именно при "выпадании",вроде уже нет возможности поменять фокус. Пытался также в момент "выпадания" в процедуре фильтрации менять параметр данной колонки "Lines in Drop Down", при этом выпадающий список вообще отказывается появляться. Видимо , некорректно менять этот параметр в этот момент.

Как-то можно заставить dddw выпадать с "правильной" длиной списка ?
Вариант с "Lines in Drop Down" = 0 не устраивает по эстетическим соображениям.
1 дек 03, 10:22    [440152]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
Филипп
Member

Откуда: Boston, MA, USA (c 1989 ) б. Москва
Сообщений: 1880
Вопрос Lines in Drop Down уже обсуждался на этом форуме. Не трогай их вообще.
1 дек 03, 18:46    [441417]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
Вовик
Member

Откуда: Москва
Сообщений: 196
Я и не трогаю, хочу только каким-нибудь образом заставить выпадать список с правильной длиной.
Неужели никто этого не делал?
1 дек 03, 18:59    [441433]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
Филипп
Member

Откуда: Boston, MA, USA (c 1989 ) б. Москва
Сообщений: 1880
Если не будешь трогать, то будет с правильной длинной.
1 дек 03, 19:27    [441480]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
Вовик
Member

Откуда: Москва
Сообщений: 196
У меня возникло такое решение.

Если количество строк в dddw слабо зависит от текущей записи , где выпадает список , и в среднем предсказуемо , можно ставить Lines in Drop Down = x ( некое "удобоваримое" значение , зависящее от количества строк в dddw но не более 10-20 )

Иначе , оставляем все на откуп системе ( Lines in Drop Down = 0 )
2 дек 03, 11:01    [442035]     Ответить | Цитировать Сообщить модератору
 Re: help my  [new]
DIGITALPRO
Guest
Вовик я в РВ 2 мес.
и делаю так:

integer nol
DataWindowChild rs_dddw

if dwo.name="DDDW_1" then

SetNull(nol)
dw_1.object.DDDW_2[row]=nol
dw_1.Update()
dw_1.GetChild("DDDW_2",rs_dddw)

dddw_2.SetTransObject(sqlca)
dddw_2.SetFilter("svyaz="+string(dw_1.object.DDDW_1[row]))
dddw_2.Filter()
dddw_2.retrieve()
end if
4 дек 03, 13:05    [446464]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить