|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
День добрый! Вот такой вопросик. Есть небезызвестное свойство DynamicControlSource у Column, если в качестве значения этого свойства прописать вычисляемое выражение, то для каждой отображаемой записи грид можно использовать свой контрол... Проблема в следующем .... Таблица источник содержит довольно много записей > 10.000, и хотелось бы вычислять эти контролы только для отображаемого набора (+- 2-ух кратный), в противном случае (в моей реализации на 30.000 программа думает 5 мин.).... То бишь по сути получать диапазон отображаемых записей.... Как это можно сделать? пасиба ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2010, 21:02 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
_usa__83_День добрый! Вот такой вопросик. Есть небезызвестное свойство DynamicControlSource у Column, если в качестве значения этого свойства прописать вычисляемое выражение, то для каждой отображаемой записи грид можно использовать свой контрол... Проблема в следующем .... Таблица источник содержит довольно много записей > 10.000, и хотелось бы вычислять эти контролы только для отображаемого набора (+- 2-ух кратный), в противном случае (в моей реализации на 30.000 программа думает 5 мин.).... То бишь по сути получать диапазон отображаемых записей.... Как это можно сделать? пасиба Вообще, движок фокса вычисляет контролы как раз для видимых в данный момент элементов. Покажите где, как и в каком методе вы назначаете DynamicControlSource. Ключевым здесь будет "в каком методе". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 06:03 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
Kruchinin Pahan, Column.DynamicCurrentControl={имя_массива_контролов[RECNO(псевдоним_таблицы_источника)]} .... задается в методе (у меня называется) INITIALIZE (что-т вроде принудительной инициализации)... Вообщем то что Фокс должен вычислять только видимые это ясно, в противном случае стандартный грид висел ~столько же что и мой "доработанный"... Задача как раз именно в том, чтобы я мог получить примерно следующее: "Видимыми на текущий момент являются записи с n до n+m"... Код могу прицепить, эт малость переработанная версия предложнного варианта (забыл автора) "Иерархические данные в фоксовом гриде".... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 07:36 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
_usa__83_, Помогут ActiveRow, RelativeRow для вычисления верхней видимой строки. И Height, RowHeight для вычисления количества строк. А вот почему тормозит - непонятно. Контролов сильно много? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 08:23 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
Kruchinin Pahan, Да нет, - контролов то штук 15, записей в таблице 30.000 (на тек. момент) и для каждой записи надо вычислить какой контрол использовать, то бишь надо пробежаться по всем записям, а хотелось бы только по небольшому числу.... Попробую посмотрю Ваш вариант, пасиба ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 08:30 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
_usa__83_Kruchinin Pahan, Да нет, - контролов то штук 15, записей в таблице 30.000 (на тек. момент) и для каждой записи надо вычислить какой контрол использовать, то бишь надо пробежаться по всем записям, а хотелось бы только по небольшому числу.... Попробую посмотрю Ваш вариант, пасиба А занафига пробегаться? Не понятно. Почему это предварительно нельзя вычислить. Покажите, таки код. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 08:34 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
_usa__83_Kruchinin Pahan, Да нет, - контролов то штук 15, записей в таблице 30.000 (на тек. момент) и для каждой записи надо вычислить какой контрол использовать,Задлянафига? Зачем для всех? Какой дурак будет ковырять сразу 30 тыс. записей? Что значит вычислять для каждой? Условие подстановки нужного контрола пишется для одной строки ибо именно при выводе строки на экран это вычисление и происходит. Для десятка-двух обновременно видимых на экране записей все не так уж и плохо. Или я что-то не понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 09:55 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
проходящий., Ну дык че так сразу, просто попробовал.... ну не получилось... Поэтому я и задал вопрос о получении "ограниченного набора", - только тех записей которые отображаются.... ActiveRow и ReleativeRow хороши но только когда не пользуешься скролом, в этом случае и ActiveRow и RelativeRow уходят в 0... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2010, 07:43 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
_usa__83_проходящий., Ну дык че так сразу, просто попробовал.... ну не получилось... Поэтому я и задал вопрос о получении "ограниченного набора", - только тех записей которые отображаются.... ActiveRow и ReleativeRow хороши но только когда не пользуешься скролом, в этом случае и ActiveRow и RelativeRow уходят в 0...Уже было написано: Вообще, движок фокса вычисляет контролы как раз для видимых в данный момент элементов. Исходя из этого совершенно непонятно какой велосипед Вы там себе изобретаете? Какие нафиг массивы? Лучше всего когда условие выбора контрола зависит только отзначений полей самой отображаемой записи. Вот это условие прописывается в DynamicCurrentControl. И все. Вы, наконец-то, намудренный код покажете или предлагаете дальше лечить даже без фотографии? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2010, 10:12 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
проходящий., Ок прицеплю, но ток чтоб не оч критично... гы-гы ок? (сегодня я финьк) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2010, 10:11 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
проходящий., Ну вот собственно в GridTree (прородитель данного безобразия) в s.vcx класс dgrid моя переделка (еще недоделка) .... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2010, 10:53 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
_usa__83_ , Чтоб не плодить огромное количество переключаемых объектов (которые будут тормозить) есть два выхода: 1. Если некоторые элементы в колонке отображаются одинаково, значит для них можно использовать один объект и можно придумать какую-то систему минимизации количества объектов. Т.е. каждая запись должна нести в себе информацию, как её отображать, каким объектом. 2. Использовать известный фокус с Backstyle_Access() методом. В колонку грида пихается контейнер, в нём может быть всё что угодно, метод Backstyle_Access() контейнера будет вызван гридом для каждой записи, соответственно, в методе можно рисовать состояние контейнера для каждой записи. Вот в этом примере http://forum.foxclub.ru/read.php?29,370548,475187#msg-475187 использованы оба способа, для элементов дерева 1-й метод, а для отметок и пользовательских картинок 2-й. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2010, 11:49 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
XAndy, Пардон а Ваше вложение, эт чаем не Ваша разработка? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2010, 19:25 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
_usa__83_, Не разработка, просто пример когда-то делал. По ссылке более поздний вариант, уже использованный в приложении. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2010, 21:06 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
XAndy, Дык эт то что приложено выше (this.rar) содержит как раз мою "доработку" основанную на Вашем примере.... Там TreeBoxNames[Reccount()]... Другое дело, что вся проблема заключается в следующем: при любом способе изменения видимого набора строк в Гриде (прокрутке клавишами с переводом recno() или прокрутке скролом) получать recno() "верхней" и "нижней" отображаемых записей.... вот собственно и все, тогда проблема исчезает (количество вычисляемых значений treeboxnames сводится к двум-трем десяткам).... Вот только ActiveRow и RelativeRow не помогают при скроллинге..... Так как же все-таки получать номера именно отображаемых строк? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2010, 18:31 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
_usa__83_, Я не знаю способа точно это узнать. Да и не нужно это, грид сам всё знает, и лишнего вычислять не будет, т.е. достаточно использовать Backstyle_Access() контейнера в гриде, а для невидимых записей грид вызывать код не будет (или почти не будет, может какой-то буфер на пару "экранов" и есть) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2010, 21:41 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
XAndy, Пасиб, посмотрим backstyle_access() ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2010, 08:50 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
XAndy, Пасиба! Все работает,backstyle_access() вызывается из refresh() (в частности) и, что есть самое интересное там в действительности прокручиваются записи только отображаемые в гриде - значит логика верна .... вот только почему-то дважды для каждой записи, но все же на текущий момент проблема решена .... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2010, 21:14 |
|
Динамический набор в грид
|
|||
---|---|---|---|
#18+
_usa__83_, Вот и хорошо. А дважды наверное потому, что явный вызов backstyle_access() из refresh() делать не нужно (если я правильно понял). Access() ниоткуда вызывать не нужно, он и так вызовется, т.к. гриду надо себя прорисовывать, значит грид будет получать значение backstyle для каждой записи ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2010, 09:50 |
|
|
start [/forum/topic.php?fid=41&msg=36919066&tid=1584848]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 147ms |
0 / 0 |