Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / ComboBox и фильтр / 4 сообщений из 4, страница 1 из 1
03.03.2006, 18:46
    #33581197
TaniaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox и фильтр
Подскажи пожалуйста, у меня есть TextBox в который из спарвочника(отдельная форма) выбирается вид оборудования. И есть Combo в котором, в зависимости от выбранного вида, нужно отобразить подвиды.
Т.е. - выбираем вид, и тутже может выбрать подвид из небольшого списка. В базе подвидов коды подвидов равным тем видам, к которым они принадлежат.
Скажите как можно сделать вишеописанную связь? Кто-нибудь с подобным сталкивался?
...
Рейтинг: 0 / 0
03.03.2006, 19:25
    #33581280
Недоходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox и фильтр
2 TaniaM

Вот один вариант. В Клике текстбокса пропиши код создания массива или курсора. Ну допустим курсора. Далее пишешь
Thisform.combo1.rowsourcetype = 2
Thisform.combo1.displayvalue = ""
Thisform.combo1.rowsource = имя_курсора.имя_поля_которое_нужно_показать

и все. С курсором есть один "+". Ты можешь в него загнать скока хочешь паралельных полей и показывать в комбо тот который требуеться. При выборе из комбо какого нить значения курсор в курсоре автоматически переходит на ту строку где выбранное значение находиться. => если нужны значения принадлежащие выбранному значению в курсоре, ты можешь их легко достать, т.е. имя_курсора.имя_паралельного поля.
...
Рейтинг: 0 / 0
04.03.2006, 18:20
    #33582029
TaniaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox и фильтр
А можно ли как-то проработать такой вариант - в зависимости от выбр. вида база подвидов фильтруется и показывает в Combo только те подвиды, коды которых соответствуют коду выбр. вида.
Хотя я так пробовала, но ведь база отфильтровывается полностью, и при дальшейшем её перелистывании (в осн. форме) в окошке "Подвиды" соответственно выствечиваются только те, что отфильтровались. И им уже неважно какой там вид стоит в TextBox. Постоянну привязку что ли делать,или проверку при изменении информациии...Брр, что-то я запуталась.:(
...
Рейтинг: 0 / 0
04.03.2006, 20:00
    #33582104
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComboBox и фильтр
Hi, TaniaM !
Проанализируй пример, если заинтересует (написано на VFP80):
Код: 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.
LOCAL f_spr as Form
f_spr = CREATEOBJECT("w_spr")
f_spr.Show( 1 )

DEFINE CLASS w_spr AS form

	Height =  77 
	Width =  500 
	DoCreate = .T.
	AutoCenter = .T.
	Caption = "Справичники"
	Name = "W_spr"

	ADD OBJECT cmb_pvid AS combobox WITH ;
		RowSourceType =  6 , ;
		Height =  24 , ;
		Left =  264 , ;
		Style =  2 , ;
		TabIndex =  2 , ;
		Top =  32 , ;
		Width =  204 , ;
		Name = "Cmb_pvid"

	ADD OBJECT cmb_vid AS combobox WITH ;
		ColumnCount =  0 , ;
		ColumnWidths = "", ;
		RowSourceType =  6 , ;
		RowSource = "Q_vid.name_vid", ;
		FirstElement =  1 , ;
		Height =  24 , ;
		Left =  36 , ;
		NumberOfElements =  0 , ;
		Style =  2 , ;
		TabIndex =  1 , ;
		Top =  32 , ;
		Width =  204 , ;
		Name = "Cmb_vid"

	ADD OBJECT label1 AS label WITH ;
		Caption = "Справочник видов", ;
		Height =  17 , ;
		Left =  36 , ;
		Top =  12 , ;
		Width =  107 , ;
		Name = "Label1"

	ADD OBJECT label2 AS label WITH ;
		Caption = "Справочник подвидов", ;
		Height =  17 , ;
		Left =  264 , ;
		Top =  12 , ;
		Width =  128 , ;
		Name = "Label2"

	PROCEDURE create_cur
		LPARAMETERS i
		THIS.Cmb_pvid.RowSource = ""
		THIS.Cmb_pvid.Value = ""

		SELECT * FROM Q_pvid WHERE Q_pvid.id_vid = i ;
		  ORDER BY Q_pvid.name_pvid INTO CURSOR C_pvid

		THIS.Cmb_pvid.RowSource = "C_pvid.name_pvid"
		THIS.Cmb_pvid.Requery()
		IF !EOF('C_pvid')
		  THIS.Cmb_pvid.Enabled = .T.
		  THIS.Cmb_pvid.Value = C_pvid.name_pvid
		ELSE
		  THIS.Cmb_pvid.Enabled = .F.
		  THIS.Cmb_pvid.Value = ""
		ENDIF
	ENDPROC

	PROCEDURE Unload
		CLOSE TABLES ALL
	ENDPROC

	PROCEDURE Init
		THIS.Create_cur(Q_vid.id_vid)
	ENDPROC

	PROCEDURE Load
		CLOSE TABLES ALL
		CREATE CURSOR Q_vid (id_vid I, name_vid C( 30 ))
		FOR i= 1  TO  10 
		  INSERT INTO Q_vid (id_vid, name_vid) VALUES (i, "Вид оборудования "+STR(i, 2 ))
		ENDFOR
		GO TOP IN Q_vid

		CREATE CURSOR Q_pvid (id_pvid I, id_vid I, name_pvid C( 30 ))
		k =  0 
		FOR i= 1  TO  9 
		  FOR j= 1  TO  10 -i
		    k = k +  1 
		    INSERT INTO Q_pvid (id_pvid, id_vid, name_pvid) VALUES (k, i, "Подвид оборудования "+STR(i, 1 )+STR(j, 1 ))
		  ENDFOR
		ENDFOR
		GO TOP IN Q_pvid
	ENDPROC

	PROCEDURE cmb_vid.InteractiveChange
		THISFORM.Create_cur(Q_vid.id_vid)
	ENDPROC

	PROCEDURE cmb_vid.Init
		IF !EOF('Q_vid')
		  THIS.Value = Q_vid.name_vid
		ENDIF
	ENDPROC

ENDDEFINE
У меня все четко отработало.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / ComboBox и фильтр / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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