powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DDDW
19 сообщений из 19, страница 1 из 1
DDDW
    #33743888
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые коллеги!
Есть ПБ 10.2, ПФЦ.
Имею 1 набор данных типа DS. Этот набор в разных окнах привязан к разным полям в частности как dddw. В зависимости от содержания строки на это dddw накладывается фильтр для показа подмножества данных при вводе. Фильтр накладывается в событии ITEMFOCUSCHANGED.
В связи с тем что в других местах этот фильтр уже не нужен так как нужно показывать все данные, а даже наоборот вреден, то его надо вовремя снимать со 100 процентной вероятностью Так где бы это можно было делать?
То есть - нужна пара событий для установки и снятия фильтра на поле dddw. Или какою нибудь другую методику для альтернативного метода работы.
С уважением....
...
Рейтинг: 0 / 0
DDDW
    #33744273
Kr_Yury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для сняние фильтра достаточно задать пустое условие фильтра в команде SetFilter, т.е. dw_child.SetFilter(""), в том же событии
...
Рейтинг: 0 / 0
DDDW
    #33744313
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как снять фильтр я знаю. Вопрос в том - КОГДА правильно это сделать. При потере фокуса самим ДВ событие ItemChanged не происходит и значит там это делать нельзя. Ставить фильтр можно и на событии dropdown. Для меня главное вовремя снять его так как в других местах это дддв выглядит не очень-вместо значений видны ненужные ключевые поля-то есть вместо текста стоят цифры.
...
Рейтинг: 0 / 0
DDDW
    #33744428
Kr_Yury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно подойдет такой подход:
для одного столбца запроса определить в dw два поля, расположенных на одном месте - одно Edit, другое dddw и определить для них взаимоисключающие условия visible
...
Рейтинг: 0 / 0
DDDW
    #33744439
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обработать событие pbm_dwndropdown полностью самому. Тогда и с фильтром проблем не будет, и дополнительную функциональность в DDDW внести можно (фильтр по подстроке, вызов справочника и т.д.).
...
Рейтинг: 0 / 0
DDDW
    #33744516
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркОбработать событие pbm_dwndropdown полностью самому. Тогда и с фильтром проблем не будет, и дополнительную функциональность в DDDW внести можно (фильтр по подстроке, вызов справочника и т.д.).
событие pbm_dwndropdown в моем случае и есть наложение фильтра для того чтобы потом выбрать данные в событии itemchanged. Вот после этого нужно фильтр снять-потому что этот же ds используется для отображения данных в dddw-а отфильтрованный ds показывает не все данные.
...
Рейтинг: 0 / 0
DDDW
    #33744545
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kr_YuryВозможно подойдет такой подход:
для одного столбца запроса определить в dw два поля, расположенных на одном месте - одно Edit, другое dddw и определить для них взаимоисключающие условия visible
я для dddw использую в основном грид. в нем трудно это сделать. И потом - очень много этих DDDW-если на каждую делать по 2 поля то значит надо просто для показа делать select из другой таблицы то есть менять запрос и довольно сильно-а там всегда бывают нежелательные эффекты.
...
Рейтинг: 0 / 0
DDDW
    #33744813
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboykoсобытие pbm_dwndropdown в моем случае и есть наложение фильтра для того чтобы потом выбрать данные в событии itemchanged. Вот после этого нужно фильтр снять-потому что этот же ds используется для отображения данных в dddw-а отфильтрованный ds показывает не все данные.
Ну так в этом событии поставить фильтр, открыть окно выпадающего списка, получить данные, присвоить данные полю, закрыть окно, снять фильтр вернуть 1.
...
Рейтинг: 0 / 0
DDDW
    #33744858
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк sboykoсобытие pbm_dwndropdown в моем случае и есть наложение фильтра для того чтобы потом выбрать данные в событии itemchanged. Вот после этого нужно фильтр снять-потому что этот же ds используется для отображения данных в dddw-а отфильтрованный ds показывает не все данные.
Ну так в этом событии поставить фильтр, открыть окно выпадающего списка, получить данные, присвоить данные полю, закрыть окно, снять фильтр вернуть 1.
Да но дело в том что если DW теряет фокус то нет события Itemchanged-например при переходе в др окно и снять фильтр не удается а др окна становятся "побитыми" - в них фильтр портит часть полей. Поэтому и вопрос-какое событие происходит со 100 вероятностью(в PFC или без него) где то после выхода из поля данных-там фильтр и сниму.
...
Рейтинг: 0 / 0
DDDW
    #33745056
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboykoДа но дело в том что если DW теряет фокус то нет события Itemchanged-например при переходе в др окно и снять фильтр не удается
Устанавливайте и снимайте фильтр в событии pbm_dwndropdown.
...
Рейтинг: 0 / 0
DDDW
    #33745126
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк sboykoДа но дело в том что если DW теряет фокус то нет события Itemchanged-например при переходе в др окно и снять фильтр не удается
Устанавливайте и снимайте фильтр в событии pbm_dwndropdown.
Спасибо - будем пробовать. Чего не понял-ведь выбор данных будет в Itemchanged- а это после dropdown-как ввести данные в поле в событии dropdown?
...
Рейтинг: 0 / 0
DDDW
    #33745340
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboykoСпасибо - будем пробовать. Чего не понял-ведь выбор данных будет в Itemchanged- а это после dropdown-как ввести данные в поле в событии dropdown?
Зачем выбор данных в itemchanged делать - я что-то не понимаю?
У нас это сделано через setitem, потом закомментарено :) и сделано через settext.
...
Рейтинг: 0 / 0
DDDW
    #33745365
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк sboykoСпасибо - будем пробовать. Чего не понял-ведь выбор данных будет в Itemchanged- а это после dropdown-как ввести данные в поле в событии dropdown?
Зачем выбор данных в itemchanged делать - я что-то не понимаю?
У нас это сделано через setitem, потом закомментарено :) и сделано через settext.
Для иллюстрации маленький примерчик - правда ничего не понимаю :)!
...
Рейтинг: 0 / 0
DDDW
    #33745418
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
String ls
Integer li

BtnClick =  1 

ls = dw_select.Describe (ColID + ".ColType")
li = Pos (ls, '(')
IF li >  0  THEN
	ls = Mid (ls,  1 , li -  1 )
ELSE
	ls = Mid (ls,  1 , Len (ls))
END IF
if dw_select.RowCount () <   1  Then
	IF isValid (Parent) and (not(IsNull(Parent)))THEN CLOSE (Parent)
	return 
end if
CHOOSE CASE ls
	CASE "date"
		iuo.DW.SetText (String (dw_select.GetItemDate (dw_select.GetRow (), ColID)))
//		iuo.DW.SetItem (iuo.CurrentRow, ColIDSource, dw_select.GetItemDate (dw_select.GetRow (), ColID))
	CASE "datetime"
		iuo.DW.SetText (String (dw_select.GetItemDateTime (dw_select.GetRow (), ColID)))
		li = iuo.DW.AcceptText ()
//		iuo.DW.SetItem (iuo.CurrentRow, ColIDSource, dw_select.GetItemDateTime (dw_select.GetRow (), ColID))
	CASE "time", "timestamp"
		iuo.DW.SetText (String (dw_select.GetItemTime (dw_select.GetRow (), ColID)))
		li = iuo.DW.AcceptText ()
//		iuo.DW.SetItem (iuo.CurrentRow, ColIDSource, dw_select.GetItemTime (dw_select.GetRow (), ColID))
	CASE "int", "long", "number"
		iuo.DW.SetText (String (dw_select.GetItemNumber (dw_select.GetRow (), ColID)))
//		iuo.DW.SetItem (iuo.CurrentRow, ColIDSource, dw_select.GetItemNumber (dw_select.GetRow (), ColID))
	CASE "decimal"
		iuo.DW.SetText (String (dw_select.GetItemDecimal (dw_select.GetRow (), ColID)))
//		iuo.DW.SetItem (iuo.CurrentRow, ColIDSource, dw_select.GetItemDecimal (dw_select.GetRow (), ColID))
	CASE ELSE
		iuo.DW.SetText (String (dw_select.GetItemString (dw_select.GetRow (), ColID)))
//		iuo.DW.SetItem (iuo.CurrentRow, ColIDSource, dw_select.GetItemString (dw_select.GetRow (), ColID))
END CHOOSE

li = iuo.DW.AcceptText ()
IF li <>  1  THEN
	iuo.DW.SetText (String (Old))
	iuo.DW.AcceptText ()
END IF

If Isvalid (This) Then
	IF isValid (Parent) then
		if (not(IsNull(Parent))) THEN  CLOSE (Parent)
	end if
end if
Стало понятней? :)
...
Рейтинг: 0 / 0
DDDW
    #33745564
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все правильно.
Только уменя нет таких параметров как - colID, colIdSource. вся проблема - где их взять потому что dropdown не имеет параметров. Это аналоги из itemchanged-имя колонки и ее новое значение. Вы наверно волшебники - это знаете но не говорите откуда :). А я и спрашиваю - как в dropdown получить имя колонки и ее новое значение? там же их нет.
...
Рейтинг: 0 / 0
DDDW
    #33745591
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboykoВсе правильно.
Только уменя нет таких параметров как - colID, colIdSource. вся проблема - где их взять потому что dropdown не имеет параметров. Это аналоги из itemchanged-имя колонки и ее новое значение. Вы наверно волшебники - это знаете но не говорите откуда :). А я и спрашиваю - как в dropdown получить имя колонки и ее новое значение? там же их нет.
Ну так текущая строка и текущая колонка - это оно и есть.
Код: plaintext
1.
2.
3.
ColIDSource = iuo.DW.GetColumnName ()
ColName = iuo.DW.Describe (ColIDSource + ".dddw.DisplayColumn")
ColID = iuo.DW.Describe (ColIDSource + ".dddw.DataColumn")
...
Рейтинг: 0 / 0
DDDW
    #33745686
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь более или менее понятно. Но тогда можно ли сказать что в datawindowchild к данному моменту(в dropdown) getrow даст выбранную пользователем строку.
...
Рейтинг: 0 / 0
DDDW
    #33745921
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboykoТеперь более или менее понятно. Но тогда можно ли сказать что в datawindowchild к данному моменту(в dropdown) getrow даст выбранную пользователем строку.
Это не в DataWindowChild, это в DataWindow, где нажали кнопку чтобы открыть DropDown. Вместо стандартного DropDown открывается свое окно, в котором пользователь выбирает значения из списка, после чего значение прописывается в текущую ячейку. Приведенные выше скрипты - именно с этого окна. На pbm_dwndropdown только висит только вызов этого окна с передачей ему конкретного экземпляра DataWindow в качестве параметра.
...
Рейтинг: 0 / 0
DDDW
    #33746162
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк sboykoТеперь более или менее понятно. Но тогда можно ли сказать что в datawindowchild к данному моменту(в dropdown) getrow даст выбранную пользователем строку.
Это не в DataWindowChild, это в DataWindow, где нажали кнопку чтобы открыть DropDown. Вместо стандартного DropDown открывается свое окно, в котором пользователь выбирает значения из списка, после чего значение прописывается в текущую ячейку. Приведенные выше скрипты - именно с этого окна. На pbm_dwndropdown только висит только вызов этого окна с передачей ему конкретного экземпляра DataWindow в качестве параметра.
Спасибо за помощь Марк!
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DDDW
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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