|
|
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
Помогите разобраться, Фокс начал изучать недавно и возник вопрос. На форме создал Grid в нем подключил таблицу tab1 . Далее на форме создал ComboBox и укал в нем одно из полей таблицы tab1. Как сделать чтобы выбрав что-то в ComboBoх в Grid оставались строки только с выбранным значением. Спасибо. kolobok-007@yandex.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2006, 13:17 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
В InteractiveChange ComboBoxа используй SET FILTER TO по значению из поля таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2006, 10:09 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
StasLВ InteractiveChange ComboBoxа используй SET FILTER TO по значению из поля таблицы. А можно поподробнее насчет этого, а то я вроде по форуму полазил но так и не смог понять толком как именно задаётся условие фильтрации. Я только начал изучать VFP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 09:49 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
МашкоБ.В. StasLВ InteractiveChange ComboBoxа используй SET FILTER TO по значению из поля таблицы. А можно поподробнее насчет этого, а то я вроде по форуму полазил но так и не смог понять толком как именно задаётся условие фильтрации. Я только начал изучать VFP. Можно. Сам принцип этого я прочитал в какой-то из статей Владимира Максимова. Все работает отлично. В Loade Formы пишешь Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. В Initе Combo Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: plaintext 1. 2. 3. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 10:28 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
StasL , большое спасибо. Но я извеняюсь за свою тупость и непонятливость. Условие немножко изменилось. Grid формируется через локальное представление vie ,которое формируется из 2-ух таблиц Disp3 и Disp1. Combo тоже формируется по полю vie.nomer. Получается что select здесь нельзя использовать. Так ? Не подскажите как тогда здесь решить проблему. Извеняюсь за надоедливость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 15:25 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
МашкоБ.В. Grid формируется через локальное представление vie ,которое формируется из 2-ух таблиц Disp3 и Disp1. Combo тоже формируется по полю vie.nomer. Получается что select здесь нельзя использовать. Так ? Источником данных для Combo у тебя должен быть массив из 2 полей, в первом то что-ты хочешь отобразить в на экране в самом Combo, второе уникальное поле (обычно это ID), которое ты и будешь получать как значение (Value) Combo. А уже каким образом ты его получишь, из своего vie или из Tabl, это твое сугубо личное дело . Так же дело обстоит и с источником данных для грида, главное что бы в нем было поле для "связи" с Соmbo. В твоем случае это vie.nomer. В строке Код: plaintext Да, небольшое уточнение. Перед командой SET FILTER TO перейди в область источника данных для Grida. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 16:00 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
Hi StasL! > SELECT * FROM Tab1 t INTO DBF tab_tmp && Источник для Grida Зачем выбирать ВСЕ данные в новую таблицу? > SET FILTER TO tab_tmp.ID_Tab1 = VAL(ThisForm.Combo.Value) Не будет работать. Внутри условия фильтра не катят ThisForm... Если состряпать условие как строку - ещё куда ни шло, а напрямую к ThisForm... - не пойдёт. И вообще пора, давно пора уже отказаться от SET FILTER Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 02:09 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
Hi Igor Korolyov Igor Korolyov Hi StasL! > SELECT * FROM Tab1 t INTO DBF tab_tmp && Источник для Grida Зачем выбирать ВСЕ данные в новую таблицу? Естественно ВСЕ данные собирать ненужно. * -- для примера. Я думаю МашкоБ сам об этом догадался. Igor Korolyov > SET FILTER TO tab_tmp.ID_Tab1 = VAL(ThisForm.Combo.Value) Не будет работать. Внутри условия фильтра не катят ThisForm... Если состряпать условие как строку - ещё куда ни шло, а напрямую к ThisForm... - не пойдёт. Ну у меня же работает (VFP8). Я привел код рабочей программы. Igor Korolyov И вообще пора, давно пора уже отказаться от SET FILTER Мне кажется что все зависит от конкретной задачи. У меня небольшой объем данных как в Grid так и в Сombo. И мне достаточно SET FILTER. Поделитесь своим опытом, может ваш вариант больше подойдет автору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 09:55 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за помощь. Но я полазив по форуму и кое чего почитав сделал так В InteractiveChange ComboBoxа я прописал PUBLIC lsNomer SELECT vie lsNomer=This.Value SET FILTER TO vie.nomer=Alltrim(LOWER(lsNomer)) GO TOP thisform.Grid2.Refresh() вроде бы работает,но в combo остаётся только выбранная строка , а я хочу чтобы остался первоначальный список,а чтобы вернулся первоначальный список и все записи в Grid нужно удалить через Del строку в Combo. Приэтом возникает глюк с переходом по Grid: нажав на любую запись меня перекидывает в конец. Может кто знает как исправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 12:26 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
Ну давай разберемся во всем по-порядку. Что является источником для Combo? Я подразумеваю что у тебя Combo.RowSource = "твоя vie". SET FILTER действует на всю область vie, поэтому у тебя и остается только выбранная строка. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 13:04 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
Да не совсем в Combo.RowSource="vie.nomer" тоесть поле из vie ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 13:15 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
МашкоБ.В.Спасибо всем за помощь. Но я полазив по форуму и кое чего почитав сделал так В InteractiveChange ComboBoxа я прописал PUBLIC lsNomer SELECT vie lsNomer=This.Value SET FILTER TO vie.nomer=Alltrim(LOWER(lsNomer)) GO TOP Объявление PUBLIC переменных в Formaх не есть хорошо , а тем более в InteractiveChange. Так как эта переменная видна всей твоей программе, а тебе она нужна только в InteractiveChange. Если уж ты так хочешь ее использовать объяви ее LOCAL. Хотя я не могу понять зачем она вообще нужна. Ну ладно, у каждого свой стиль программирования. МашкоБ.В.Да не совсем в Combo.RowSource="vie.nomer" тоесть поле из vie SET FILTER действует на всю область vie , поэтому у тебя и остается только выбранная строка. А чем тебе не полходит массив? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 13:22 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
PUBLIC lsNomer используется для того чтобы переменная была видна всей программе т.к. на set filter to нельзя ставить локальную переменную ибо обработав её 1 раз он потом пишет что lsNomer not found А массив не использую т.к. по своей тупости не понимаю полностью твой код Объясни если не сложно Например SELECT DISTINCT t.Name, t.ID_Tab1 зачем t.Name и t.ID_Tab1 это просто переменные и зачем передними t.? FROM Tab1 t это то откуда мы берём данные ? в моем случае это vie? INTO ARRAY ThisForm.аCombo то куда мы записываем наш массив ? если у меня Combo.name="Combo1" то я так и должен записать INTO ARRAY ThisForm.Combo1 SELECT * FROM Tab1 t INTO DBF tab_tmp но если у меня Grid получает данные из vie то куда их тогда записывать? Если ещё не сильно достал объясни!! ожалуйста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 15:32 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
МашкоБ.В. А массив не использую т.к. по своей тупости не понимаю полностью твой код Объясни если не сложно "Вы не любите кошек? Вы просто не умеете их готовить!!!" Так бы сразу и сказал. Объясняю. МашкоБ.В. Например SELECT DISTINCT t.Name, t.ID_Tab1 зачем t.Name и t.ID_Tab1 это просто переменные и зачем передними t.?t -- это псевдоним таблицы Tab1 используемый в SELECT t.Name -- это ничто иное как Tab1.Name, то есть поле Name из таблицы Tab1 Его желательно использовать для явного указания SELECTу какое поле ты хочешь вывести в запросе, особенно когда ты связываешь 2 и более таблиц и они имеют одинаковые названия полей. У меня реальный запрос много сложнее поэтому я забыл это удалить, впрочем как и DISTINCT. МашкоБ.В. FROM Tab1 t это то откуда мы берём данные ? в моем случае это vie?Да МашкоБ.В. INTO ARRAY ThisForm.аCombo то куда мы записываем наш массив Да МашкоБ.В. ? если у меня Combo.name="Combo1" то я так и должен записать INTO ARRAY ThisForm.Combo1Нет ThisForm.аCombo -- это свойство формы представляющее из себя массив. Ты его создаешь коммандой Код: plaintext Сначала опишу что у меня, возможно у тебя такая же ситуация, раз ты делаешь vie из 2 таблиц (почему из 2 ты не написал.) А ты уже по аналогии сооруди себе сам. У меня есть таблица-справочник, ну допустим Banks. В ней два поля ID и Name. ID - уникальный идентификатор записи. Name - содержит названия банков. Код: plaintext 1. 2. 3. 4. 5. 6. В твоем случае вместо таблицы Banks ты подставляешь свой источник информации vie. Далее в Inite Combo Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Теперь о Gride. У меня есть вторая таблица, ну допустим Оtdelenie. В ней три поля ID, ID_Banks и Name. ID - уникальный идентификатор записи. ID_Banks - уникальный идентификатор записи из таблицы Banks. Name - содержит названия отделений. Т. е. эти две таблицы связаны один-ко-многим. Вторая таблица является источником для грида. У тебя это vie. Т. е. SELECT FROM Tab1 t INTO DBF tab_tmp тебе делать не нужно. Ну вроде бы все, если тебя еще больше не запутал. Ну нет у меня преподавательских способностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 16:40 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
Пока вроде понятно сейчас еду с практики домой ,буду пробывать если что ещё напишу , Большое спасибо , а не мог бы ссылочку статьи ВладимираМ скинуть или мне на ящик kolobok-007@yandex.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 17:03 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
Hi StasL! >> Зачем выбирать ВСЕ данные в новую таблицу? > Естественно ВСЕ данные собирать ненужно. * -- для примера. Проблема не в * а в том что нету WHERE части... Вообще фокс при обработке запросов не способен "частично" извлекать поля - т.е. что ты напишешь SELECT *, что SELECT f1, f2 - разницы не будет - фокс читает для отбираемых записей все поля из исходной таблицы. Кроме того я не понимаю общего смысла создания копии таблицы... Если уж надо делать выборки (и именно ограничивающие число отбираемых записей! Причём существенно ограничивающие - выборка 90000 из 100000 под это конечно не подходит), то в большинстве случаев более выгодно (просто, эффективно и функционально) использовать представления - конечно параметризованные. >>> SET FILTER TO tab_tmp.ID_Tab1 = VAL(ThisForm.Combo.Value) >> Не будет работать. Внутри условия фильтра не катят ThisForm... > Ну у меня же работает (VFP8). В модальной форме? В общем случае не работает, т.к. область видимости ThisForm ограничена и в куче случаев будет банально выходить ошибка о недоступности этого самого ThisForm... Так что тут вариант Машко с PUBLIC переменной более корректен (хотя конечно очень некрасив). Если уж делать, то как я сказал - через перевод параметра в строку (т.е. убрать ссылку заменив её константой). lcFilter = "ID_Tab1 = " + ThisForm.Combo.Value SET FILTER TO &lcFilter Т.е. в итоге получится что условие фильтра выглядит как ID_Tab1 = 123 - и никаких ссылок - ни на PUBLIC переменную ни на ThisForm... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2006, 14:17 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
Здравствуйте StasL !! Спасибо за подробное объяснение почти во всем разобрался! Возник вопрос только в одном месте. ThisForm.AddProperty('aCombo1(1)') SELECT nomer FROM vie; INTO ARRAY Thisform.aCombo1 IF _TALLY = 0 ThisForm.aCombo1[1] = '\' ENDIF что указывает 1 в ('aCombo1(1)') и что делает цикл IF _TALLY = 0 ThisForm.aCombo1[1] = '\' ENDIF Поменяв всё под своё представление у меня выкидывается ошибка 'ACOMBO1' is not an array на код .RowSourceType = 5 т.е. aCombo1 не воспринемается как массив. Не подскажите в чем ошибка? Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2006, 12:58 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
МашкоБ.В. что указывает 1 в ('aCombo1(1)') Как я уже говорил, коммандой Код: plaintext 1 указывает на то, что в массиве есть один элемент. Т. е. ты указываешь размерность массива. (1, 1) - один элемент двухмерного массива. МашкоБ.В. и что делает цикл IF _TALLY = 0 ThisForm.aCombo1[1] = '\' ENDIF Во первых это не цикл, а ветвление _TALLY -- это системная переменная памяти. Содержит числовое значение, которое выводит количество записей, обработанных самой последней выполнявшейся табличной командой. В твоем случае это SELECT. Т. e. если SELECT не выдает ни одной записи _TALLY = 0. Так как твой единственный элемент в массиве имеет значение по умолчанию .F., то ThisForm.aCombo1[1] = '\' , что бы в дальнейшем не получить ошибку несовпадения типов. А символ '\' в Combo отображаться не будет. МашкоБ.В. Поменяв всё под своё представление у меня выкидывается ошибка 'ACOMBO1' is not an array на код .RowSourceType = 5 т.е. aCombo1 не воспринемается как массив. Не подскажите в чем ошибка? Посмотри через Debugger создается ли у тебя массив ACOMBO1. Может ты где-то код не в том методе прописал. Так сразу сказать не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2006, 14:29 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
При выполнении формы в Debugger на вкладке Lokals появляется aCombo1 с не понятным типом данных '''' причём ошибка начинается с Combo1.Init= WITH This .RowSourceType = 5 .RowSource = "ThisForm.aCombo1(1)" .ColumnCount = 2 .ColumnLines = .F. .ColumnWidths = LTRIM (STR (.Width - 46)) .BoundColumn = 2 .ListIndex = 1 ENDWITH нажав пару раз Ignor появляется форма form1 и в Debugger на вкладке Lokals открыв ветку form1 появляется aCombo1 типа array и если открыть ветку aCombo1 то видно все значения. А код у меня написан так: в Load form1 ThisForm.AddProperty('aCombo1(1)') SELECT nomer FROM vie; INTO ARRAY Thisform.aCombo1 IF _TALLY = 0 ThisForm.aCombo1[1] = '\' ENDIF Далее в form1 создал метод filter_data и в нем прописал ThisForm.LockScreen = .T. SELECT vie SET FILTER TO vie.nomer = Val(ThisForm.Combo1.Value) GO TOP ThisForm.LockScreen = .F. В Combo1.Init прописал WITH This .RowSourceType = 5 .RowSource = "ThisForm.aCombo1(1)" .ColumnCount = 2 .ColumnLines = .F. .ColumnWidths = LTRIM (STR (.Width - 46)) .BoundColumn = 2 .ListIndex = 1 ENDWITH ThisForm.Filter_Data А в InteractiveChange ComboBoxа прописал ThisForm.Filter_Data Получается что сначала пытается создаться массив , но он создаётся только после создания формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2006, 16:36 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
МашкоБ.В. WITH This .RowSourceType = 5 .RowSource = "ThisForm.aCombo1(1)" .ColumnCount = 2 .ColumnLines = .F. .ColumnWidths = LTRIM (STR (.Width - 46)) .BoundColumn = 2 .ListIndex = 1 ENDWITH Неправильно. У тебя массив одномерный. Попробуй так. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2006, 16:48 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
Я поменял код но ничего не изменилось. Сразу после запуска возникает ошибка в SELECT vie WITH This .RowSourceType = 5 .RowSource = "ThisForm.aCombo1" .ListIndex = 1 ENDWITH ThisForm.Filter_Data Интерес в том что после создания формы массив в Debugger виден но он не отображается в ComboBox ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2006, 17:27 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
Ошибка то какая и на какой конкретно строке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2006, 18:03 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
StasLОшибка то какая и на какой конкретно строке? 'ACOMBO1' is not an array на код .RowSourceType = 5 затем нажав ignor ошибка перескакивает на .RowSource = "ThisForm.aCombo1" затем на .ListIndex = 1 потом на SET FILTER TO vie.nomer = Val(ThisForm.Combo1.Value) затем появляется форма ,Грид, Бокс, кнопки появляется окошко где написано 'ACOMBO1' is not an array нажимаем ОК и все . Форма остается но в КОМБО ничего нет! -) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2006, 09:42 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
Property aCombo1 в форме существовать не должно! Удали его! Ты его создаешь "на лету" коммандой Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2006, 09:52 |
|
||
|
Combo i Grid
|
|||
|---|---|---|---|
|
#18+
StasLProperty aCombo1 в форме существовать не должно! Удали его! Ты его создаешь "на лету" коммандой Код: plaintext Я что-то не понял, мне надо удалить мой Combo1 , помоему нет.Аа так я не создавал отдельно Property aCombo1. Или может я чего не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2006, 10:31 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33830794&tid=1591275]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 222ms |
| total: | 388ms |

| 0 / 0 |
