powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Объекты фильтрации и сортировки в dw grid
14 сообщений из 14, страница 1 из 1
Объекты фильтрации и сортировки в dw grid
    #36024857
dakota97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста существует ли готовые визульные объекты для фильтрации и сортировки данных в dw grid?Где их можно посмотреть?Может ктото поделится своими наработками?Основное правило - что бы эти объекты умели работать и с расчетными полями.
спасибо
...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36026379
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может вам ещё еду пожевать и в рот плюнуть? :-)
...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36026700
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пара объектов (для фильтрации), попробуйте разобраться :-)

Код: plaintext
1.
2.
3.
4.
5.
6.
$PBExportHeader$str_column_metadata.srs
$PBExportComments$coremisc.pbl - Holds table and column attributes for nv_validate functions
global type str_column_metadata from structure
	string		columnname
	string		columntype
	integer		columnid
end type

Код: 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.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
$PBExportHeader$u_generic_filter.sru
$PBExportComments$cm_u1.pbl
forward
global type u_generic_filter from datawindow
end type
end forward

shared variables

end variables
global type u_generic_filter from datawindow
integer width =  2482 
integer height =  456 
boolean border = false
end type
global u_generic_filter u_generic_filter

type variables
PUBLIC: // On purpose
CONSTANT integer SUCCESS =  1 
CONSTANT integer FAILURE = - 1 
CONSTANT integer NO_ACTION =  0 
CONSTANT string DW_DESCRIBE_NOVALUE = "?"
CONSTANT string DW_DESCRIBE_ERROR = "!"

PROTECTED:
str_column_metadata istr_filter_columns[] 


end variables

forward prototypes
public function string of_get_filter ()
public function integer of_clear ()
protected subroutine of_dofilter (long row)
public function integer setfullstate (readonly blob changes)
end prototypes

public function string of_get_filter ();/*------------------------------------------------------------------------------

 Function:			public u_generic_filter.of_Get_filter

 Returns:         String

 Parameters:      

 Copyright © 2005 DTI - Philip Salgannik

 Date Created: 2/14/2005

 Description:	ENh 60459
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/
integer li_total, kount
string ls_value, ls_filter
long ll_row
datetime dtt_check
ll_row = GetRow()
IF ll_row <  1  THEN RETURN ""
li_total = UpperBound(istr_filter_columns) 

IF li_total <  1  THEN RETURN ""
IF RowCount() =  0  THEN RETURN ""
IF ModifiedCount() =  0  THEN RETURN ""

FOR kount =  1  to li_total
	
	ls_value = String(object.data[ll_row, istr_filter_columns[kount].columnid])
	IF IsNull(ls_value) THEN CONTINUE
	IF ls_value="" THEN CONTINUE
	CHOOSE CASE istr_filter_columns[kount].columntype
		CASE "char(", "char"
			ls_value = "'" + lower(ls_value) + "'"
			
		CASE "datet"
			IF pos(istr_filter_columns[kount].columnname, "from_date") >  0  THEN
				ls_value = ">=datetime('" + ls_value + "')"
			ELSEIF pos(istr_filter_columns[kount].columnname, "to_date") >  0  THEN				
				dtt_check = DateTime(RelativeDate(Date(object.data[ll_row, istr_filter_columns[kount].columnid]),  1 ))
				ls_value = "<datetime('" + String(dtt_check) + "')"
			ELSE
				ls_value = "=datetime('" + ls_value + "')" 
			END IF
		CASE ELSE
			ls_value = "=" + ls_value 
	END CHOOSE
	IF Len(ls_filter) >  0  THEN ls_filter += " AND "
	IF istr_filter_columns[kount].columntype = "char(" OR istr_filter_columns[kount].columntype = "char" THEN
		ls_filter += "Match(lower(" + istr_filter_columns[kount].columnname + "), " + ls_value + ")"
	ELSE
		ls_filter += istr_filter_columns[kount].columnname + ls_value	
	END IF
	
NEXT

RETURN ls_filter


end function

public function integer of_clear ();/*------------------------------------------------------------------------------

 Function:			public u_generic_filter.of_Clear

 Returns:         Integer

 Parameters:      

 Copyright © 2005 DTI - Philip Salgannik

 Date Created: 2/15/2005

 Description:	
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/
IF RowCount() <  1  THEN RETURN SUCCESS
integer li_rtn

SetRedraw(FALSE)
li_rtn = reset()
InsertRow( 0 )
SetRedraw(TRUE)
RETURN li_rtn

end function

protected subroutine of_dofilter (long row);/*------------------------------------------------------------------------------

 Function:			protected u_generic_filter.of_Dofilter

 Returns:         (none)

 Parameters:      value Long row

 Copyright © 2005 DTI - Philip Salgannik

 Date Created: 2/17/2005

 Description:	
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/

IF IsNull(row) THEN RETURN
IF row <  1  THEN RETURN

parent.postevent ("ue_filter")


end subroutine

public function integer setfullstate (readonly blob changes);/*------------------------------------------------------------------------------
 
 Function:		public u_generic_filter.Setfullstate

 Parameters:      	readonly Blob changes	

 Returns:         	Integer

 Copyright © 2006 DTI - Philip Salgannik

 Date Created: 06/07/2006

 Description: 	ENh 60459

--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments

------------------------------------------------------------------------------*/
integer li_rtn
string ls_name, s_visible
integer ll_tot, kount, ii, li_tab
li_rtn = super::Setfullstate(changes)

IF li_rtn >  0  THEN
	Reset()
	Modify("DataWindow.Color='12632256'")
	Modify("DataWindow.detail.Color='536870912'")
	ll_tot = Integer(Object.DataWindow.Column.Count)
	IF ll_tot >  0  THEN	
		
		FOR kount = 1  to ll_tot
			ls_name = Describe("#" + string(kount) + ".name")
			
			s_visible = describe( ls_name + ".visible" ) 
			IF s_visible = DW_DESCRIBE_NOVALUE or s_visible = DW_DESCRIBE_ERROR THEN CONTINUE
			if s_visible = "0" then CONTINUE
			li_tab = Integer(Describe(ls_name + ".TabSequence")) 
	
			ii ++			
			istr_filter_columns[ii].columnname = ls_name	
			istr_filter_columns[ii].columntype = lower(left(describe(ls_name + ".ColType"),  5 )) 
			istr_filter_columns[ii].columnid = kount
	
			Modify(ls_name + ".protect=0")
			Modify(ls_name + ".border=5")
			Modify(ls_name + ".background.mode='2'")
			Modify(ls_name + ".background.color='16777215'")
			IF li_tab >  0  AND li_tab <  32766  THEN
			ELSE
				Modify(ls_name + ".TabSequence=" + string( 1000  + kount))
			END IF
			
		NEXT		
	END IF
	InsertRow( 0 )
	Show()
ELSE
	Hide()	
END IF
RETURN li_rtn
end function

on u_generic_filter.create
end on

on u_generic_filter.destroy
end on

event itemchanged;/*------------------------------------------------------------------------------

 Event   :			 u_generic_filter.Itemchanged

 Returns:         Long

 Parameters:      value Long row
                  value DWObject dwo
                  value String data

 Copyright © 2005 DTI - Philip Salgannik

 Date Created: 2/11/2005

 Description:	send the filter notification to the parent 
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/

of_Dofilter(row)

end event

...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36026943
dakota97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Филипп, полезные функции.


Может кто то и визульную часть может выложить?
...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36028442
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы с какой планеты? Это ВИЗУАЛЬНЫЙ объект...
...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36028578
dakota97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну значит я не понял как он работает
...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36028602
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем идея такая. Использовался u_generic_filter на общих модальных справочных окошках с большим количеством записей (показанных скажем в datawindow controle dw_1 ). В эти окошки datawindow (или datastore) вместе с данными прередавался (посему dataobоject заранее не известен), и данные пихались в dw_1 (разными методами, иногда через ShareData, иногда через GetFullState/SetFullState).
Короче прямо в painterе этот u_generic_filter посажен на окно. В open evente окна делается GetFullState того, что в него передали, с полученным блобом зовётся переребитый SetFullState на u_generic_filter объекте, делается его размещение/размер, и вуаля...
На окошке делается event ue_filter (в котором будет зваться u_generic_filter.of_get_filter() и фильтр надеваться на dw_1 ). Также на окошко вешается кнопка, которая зовёт u_generic_filter.of_clear() .
Вот и всё...
В натурели u_generic_filter был унаследован от базового datawindow controlа.
...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36030941
dakota97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Филипп, спасибо за подробное объяснение.
А то все никак не мог понять как он работает. Но этот фильтр не умеет работать в расчетными полями, нет возможности указать операцию для значения(больше, меньше...) и логическую между выражениями(и, или). В общем не очень он подошел. Может быть у вас еще есть фильтры пофункциональнее?
...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36031544
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Публикую сервис но делать перевод с версии 10.5 в 9 и оттучать от PFC и также дорабатывать если потребуется
> придется тебе самому.
>
> так же высылаю скрины....
>
>
>
> подключение в DW (u_dw)
>
> /////Instance variables
> n_cst_dwsrv_toolbarparm inv_toolbarparm
>
>
> /////functions for dw
> public function integer of_settoolbarparm (boolean ab_switch);If
> IsValid(inv_ToolbarParm) then
> Destroy inv_ToolbarParm
> end if
>
>
> public function integer of_settoolbarparm (boolean ab_switch);If
> IsValid(inv_ToolbarParm) then
> Destroy inv_ToolbarParm
> end if
>
> if ab_switch=True then
> inv_ToolbarParm=CREATE n_cst_dwsrv_ToolbarParm
> Return inv_ToolbarParm.of_SetRequestor(This)
> end if
>
> Return success
> end function
>
>
>
> /////post open
> of_SetToolbarParm(True)
> li_ret = inv_ToolbarParm.of_initialization()
>
> //////resize
> if IsValid(inv_toolbarparm) then inv_toolbarparm.EVENT pp_resize()
>
> /////retrieveend
> if IsValid(inv_toolbarparm) then
> //inv_toolbarparm.of_Initialization()
> inv_toolbarparm.of_Filter()
> end if
>
> /////scrollhorizontal
> if IsValid(inv_toolbarparm) then inv_toolbarparm.EVENT
> pp_ScrollHorizontal(scrollpos,pane)
>
> ////lbuttonup
> if IsValid(inv_toolbarparm) then inv_toolbarparm.EVENT POST
> pp_postlbuttonup()
>
>
> /////close
> of_SetToolbarParm(False)
>
>
> ЗЫ. работает сервис только для гридов.
...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36031546
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вторая часть
...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36031550
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скрин 1
...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36031553
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скрин 2
...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36031570
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скрин 3
...
Рейтинг: 0 / 0
Объекты фильтрации и сортировки в dw grid
    #36031749
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakota97Филипп, спасибо за подробное объяснение.
А то все никак не мог понять как он работает. Но этот фильтр не умеет работать в расчетными полями, нет возможности указать операцию для значения(больше, меньше...) и логическую между выражениями(и, или). В общем не очень он подошел. Может быть у вас еще есть фильтры пофункциональнее?
Ну ваще нормальные люди просто на PFC смотрят. Мой был сделан специально для работы с неизвестными (и возможно и НЕсуществующими в pble dataobjectами). Но вам никто не мешает его доработать. Или денег мне заплатить, и я его как вам надо улучшу :-))
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Объекты фильтрации и сортировки в dw grid
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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