Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Логическое цвето выделение нескольких записей / 18 сообщений из 18, страница 1 из 1
25.07.2006, 18:54
    #33877889
Sea.Starry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
Кто- нибудь пробывал организовывать выделение нескольких записей в Grid'e
я использовал механизм предложенный Дмитриtv Баянов'ым

Для каждой предметной таблицы БД необходимо открывать вспомогательную таблицу с набором записей (списком маркировки), имеющих два поля – первичный ключ GUID и признак маркировки lMarked. При операции выделения строки в список маркировки добавляется новая запись, в которую заносится значение первичного ключа предметной маркируемой записи и логическое значение признака выделения. Обе таблицы связываются реляцией по первичным ключам. В визуальную компоненту, отвечающую за показ цвета записи на экране (к примеру, DinamicBackColor), вставляется выражение динамической проверки признака маркирования в виде:
IIF(Seek(GUID) .and. MarkTable.lMarked, Color1, Color2). Для полной функциональности необходимо создать набор функций, реализующих полный набор операций с маркированными строками: выделение, отмена выделения для текущей строки, для всех строк, для строк по логическому WHERE условию, проверка на выделение.

Но такой алгоритм вызывает явные тормоза при наличии большого количества видимых на экране строк и столбцов Grid'a

В предлогаемом моем примере используйте пробел для выделения/снятия маркировки записей и при resiz'e формы можно ощутить ити тормоза на более слабых машинах точно в виде запаздывания resiz'a grida за формой

Эти тормоза связвны с постоянным seekom ключа в вспомогательной таблице в свойствах dynamicbackcolor и dynamicforecolor

Версия VFOXPRO 7
Предлогайте свой вариант
...
Рейтинг: 0 / 0
25.07.2006, 19:50
    #33877993
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
изв, но пример для 9-ки
...
Рейтинг: 0 / 0
25.07.2006, 20:23
    #33878031
Sea.Starry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
Что-то я не нашел в коде выделения груп.
Повнимательней прочитайте вoпрос
...
Рейтинг: 0 / 0
25.07.2006, 21:18
    #33878069
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
да, странно

в чекбокс потычте

а табличку линковать
не вижу особого смысла

никто не мешает
при выборке добавить в курсор дополнительное поле
и тормозов не будет
...
Рейтинг: 0 / 0
25.07.2006, 22:07
    #33878110
Sea.Starry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
Как раз в рекомендуемом примере и было сказано выше что необходимость создавать дополнительное поле не нужна
Без него нада
...
Рейтинг: 0 / 0
26.07.2006, 09:30
    #33878466
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
Используй вместо курсора одномерный массив и ascan
если ascan( тра та та ) > 0 помечаешь если нет не помечаешь
все будет летать
...
Рейтинг: 0 / 0
26.07.2006, 10:10
    #33878538
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
я попробую
если будет время выложить без поля пример
только по-позже

там идея понятна
просто создается избыточное количество записей в дополнительном курсоре
...
Рейтинг: 0 / 0
26.07.2006, 19:51
    #33880737
Sea.Starry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
Массив ито хорошо но из за теоретического барьера 65000 как то не по себе
...
Рейтинг: 0 / 0
26.07.2006, 21:41
    #33880852
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
продолженеи темы с классами

выделение - держать шифт и стрелками вверх и вниз
...
Рейтинг: 0 / 0
27.07.2006, 14:43
    #33882382
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
Sea.StarryМассив ито хорошо но из за теоретического барьера 65000 как то не по себе

сколько времени нужно что бы отметить 65000 элементов в гриде?
по секунде на элемент.... 18 часов :-)
это раз...
да и вообще зачем человеку одновременно выводить в грид 65 000 записей?
что он с ними делать будет?
должны быть условия отбора....
это два..

юзай массив не боись ;-)
...
Рейтинг: 0 / 0
27.07.2006, 14:49
    #33882414
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
скан в массиве
будет дольше работать чем сик по курсору
...
Рейтинг: 0 / 0
27.07.2006, 15:36
    #33882573
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
alex11100скан в массиве
будет дольше работать чем сик по курсору

Это ложь...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE CURSOR cr_test  ( fld1 n ( 6 )) 
DIMENSION atest( 1500 )
FOR ncnt= 1  TO  1500  
	INSERT INTO cr_test ( fld1 ) VALUES (  ncnt )
	atest(ncnt) = ncnt
ENDFOR 
SELECT cr_test
INDEX ON  fld1 TAG fld1 
nlTBeginAscan =SECONDS() 
*/* ia?aei iienea ascan ii
FOR nl1=1 TO 10000
	ASCAN(atest,1400-nl1)
ENDFOR 
nlTtotalAscan =SECONDS()- nlTBeginAscan
nlTBeginSeek =SECONDS() 
*/* ia?aei iienea seek ii
FOR nl2= 1  TO  10000 
	nlSeekexpr =  1400 -nl2
	bl = SEEK( nlSeekexpr ,"cr_test" )
ENDFOR 
nlTtotalSeek =SECONDS()- nlTBeginSeek
MESSAGEBOX("Seek*1000: " + TRANSFORM(nlTtotalSeek)+ CHR( 13 ) ;
			 + "Ascan*1000: " + TRANSFORM(nlTtotalAscan ) )
...
Рейтинг: 0 / 0
27.07.2006, 16:24
    #33882752
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
что ложь то

ну твой же тест дает
на сике 0,031
на скане 0,203

и где ложь

скан работает медленнее
...
Рейтинг: 0 / 0
27.07.2006, 16:29
    #33882770
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
Strong alex11100скан в массиве
будет дольше работать чем сик по курсору

Это ложь...



Сорри стормозил scan действительно быстрее,
но имхо не критично для данного случая
0,1 секунда на 10 000 итераций мне кажется не очень критично
что 0,03 что 0,1

в общем каждый выбирает то что ему удобнее, лично мне решение с массивом кажется более изящным. ( никаких накладных расходов на индех и курсор, а массив можно в свойства класса запихнуть и все)

Еще раз приношу извинения за некоторую скоропалительность выводов.
...
Рейтинг: 0 / 0
27.07.2006, 16:49
    #33882848
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
ну так и не опредилился быстрее или медленнее

а мне сик милее
и следить за массивом не нужно
курсор висит себе и висит
и сам буферится
и сам убъется

с курсором удобней, вот и все
я сам на 5-й лисе в массивы справочники загонял из сети,
чтобы ФС разгрузить
а сейчас лучше курсоры использовать
...
Рейтинг: 0 / 0
27.07.2006, 17:19
    #33882975
Strong
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
да, SEEK быстрее...
опять ошибся когда писал :-(
полезный топик, я не знаю почему но считал что ascan быстрее. :-)
учтем ...
написал как то классик и поехало...
но тормозов никаких не было никогда...
привычка знаете ли иногда вредная штука...
...
Рейтинг: 0 / 0
27.07.2006, 19:08
    #33883357
Sea.Starry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
Ну во первых fox 7 пример я не смог запустить но на сколько я понил из кода там тоже идет поиск в курсоре т.е от моего примера ничем не отличается значит в dynamicbackcolor кроме функции на seek в курсоре ничего хорошо не придумешь TT
...
Рейтинг: 0 / 0
27.07.2006, 19:32
    #33883415
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логическое цвето выделение нескольких записей
ну во-вторых нужно на 9-м пробовать

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


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