|
|
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
Столкнулся тут с такой проблеммой - необходимо получить handle по названию items в TreeView. Все названия итемов уникальны. Пользую PB8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 16:52 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
Травёрсать дерево :-) RTFM - FindItem PowerScript function/Syntax 4 For TreeView controls ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 19:22 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
ФилиппRTFM - FindItem PowerScript function/Syntax 4 For TreeView controls FindItem - эт конечно замечательно, но немного не то, или я не понял раздел хелпа. Повторюсь - Есть название (label) итема в дереве - требуеться получить handle этог итема в дереве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 19:35 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
Может вам ещё еду прожевать? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 19:59 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
ФилиппМожет вам ещё еду прожевать? :-) Ну можно, а почему бы и нет? А то у меня с зубьями трабла некоторая наблюдаеться. Скока будет стоит прожевывание еды? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 20:02 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
autumn ФилиппRTFM - FindItem PowerScript function/Syntax 4 For TreeView controls FindItem - эт конечно замечательно, но немного не то, или я не понял раздел хелпа. Повторюсь - Есть название (label) итема в дереве - требуеться получить handle этог итема в дереве. Не помню есть ли подходящая Вам функция в PFC, но ручками рекурсивный обход дерева пишется за 15 минут. Причём в PB итераторы писать - рахат лукум. Попробуйте, не лишайше себя доступных радостей ;-)) Судя по последней реплике, именно к этому вас Филипп и склоняет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 20:03 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
Enlighten meНе помню есть ли подходящая Вам функция в PFC, но ручками рекурсивный обход дерева пишется за 15 минут. Причём в PB итераторы писать - рахат лукум. Попробуйте, не лишайше себя доступных радостей ;-)) Судя по последней реплике, именно к этому вас Филипп и склоняет... Я понял к чему меня склоняет Филипп (я всеж не понял сколько это будет стоить?). Обход дерева - вещь вполне очевидная, и за сколько он пишеться - я в курсе. Ежли нет других вариантов(о чем и спрашивалось) - придеться остановиться на этом. Хотя когда в дереве 1500 и более итемов - эт не самый рациональный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 20:07 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
autumn Enlighten meНе помню есть ли подходящая Вам функция в PFC, но ручками рекурсивный обход дерева пишется за 15 минут. Причём в PB итераторы писать - рахат лукум. Попробуйте, не лишайше себя доступных радостей ;-)) Судя по последней реплике, именно к этому вас Филипп и склоняет... Я понял к чему меня склоняет Филипп (я всеж не понял сколько это будет стоить?). Обход дерева - вещь вполне очевидная, и за сколько он пишеться - я в курсе. Ежли нет других вариантов(о чем и спрашивалось) - придеться остановиться на этом. Хотя когда в дереве 1500 и более итемов - эт не самый рациональный вариант. Во-первых, 10^3 это не те объёмы данных, о которых можно серьёзно говорить. Соотв "нерациональность" по любому сильно врядли будет видна невооруженным глазом. Если железо не из музея. Во-вторых, если контрол специально не заточен на поиск по лэйблу, спец функция будет делать то же самое - бежать по графу и сравнивать с заданным образцом. Где ж нерациональность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 20:32 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
Enlighten meВо-первых, 10^3 это не те объёмы данных, о которых можно серьёзно говорить. Соотв "нерациональность" по любому сильно врядли будет видна невооруженным глазом. Если железо не из музея. Во-вторых, если контрол специально не заточен на поиск по лэйблу, спец функция будет делать то же самое - бежать по графу и сравнивать с заданным образцом. Где ж нерациональность? Хм, даже ежли железо не музейное ИМХО - тормоза будут. Вообщем поглядим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 20:38 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
autumn Enlighten meНе помню есть ли подходящая Вам функция в PFC, но ручками рекурсивный обход дерева пишется за 15 минут. Причём в PB итераторы писать - рахат лукум. Попробуйте, не лишайше себя доступных радостей ;-)) Судя по последней реплике, именно к этому вас Филипп и склоняет... Я понял к чему меня склоняет Филипп (я всеж не понял сколько это будет стоить?). Обход дерева - вещь вполне очевидная, и за сколько он пишеться - я в курсе. Ежли нет других вариантов(о чем и спрашивалось) - придеться остановиться на этом. Хотя когда в дереве 1500 и более итемов - эт не самый рациональный вариант. В таком случае встает вопрос - каким образом эти самые "1500 и более итемов" в дерево попали, и не нужно ли чё-нить запомнить про эти самые "1500 и более итемов" в момент их туда попадания, типа для облегчения идиотского поиска по "названия итемов уникальны"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 20:44 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
ФилиппВ таком случае встает вопрос - каким образом эти самые "1500 и более итемов" в дерево попали, и не нужно ли чё-нить запомнить про эти самые "1500 и более итемов" в момент их туда попадания, типа для облегчения идиотского поиска по "названия итемов уникальны"... Итемы эти туда попали из таблицы в базе. В принципе - можно добавить в каждое табло в базе отдельное поле которое будет( может быть) соответствовать handle в дереве, но таблиц, по кторым строятся подобные деревья - несколько. Тож вариант не очень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 20:56 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
autumn ФилиппВ таком случае встает вопрос - каким образом эти самые "1500 и более итемов" в дерево попали, и не нужно ли чё-нить запомнить про эти самые "1500 и более итемов" в момент их туда попадания, типа для облегчения идиотского поиска по "названия итемов уникальны"... Итемы эти туда попали из таблицы в базе. В принципе - можно добавить в каждое табло в базе отдельное поле которое будет( может быть) соответствовать handle в дереве, но таблиц, по кторым строятся подобные деревья - несколько. Тож вариант не очень. Ну я ваще то парень простой, но всё же и без вас догадался, что итемы эти туда попали из таблицы в базе. КАК они туда попали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 21:13 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
autumn ФилиппВ таком случае встает вопрос - каким образом эти самые "1500 и более итемов" в дерево попали, и не нужно ли чё-нить запомнить про эти самые "1500 и более итемов" в момент их туда попадания, типа для облегчения идиотского поиска по "названия итемов уникальны"... Итемы эти туда попали из таблицы в базе. В принципе - можно добавить в каждое табло в базе отдельное поле которое будет( может быть) соответствовать handle в дереве, но таблиц, по кторым строятся подобные деревья - несколько. Тож вариант не очень. Никогда бы не догадался. Это сильно. Экспрессивно. Первобытно как-то... Мне триста лет, я выполз из тьмы. (С) Макаревич. А может, не так радикально попробовать: Создаём датасторе. В нем резервируем интовое поле под хэндл. Селектим туда несметные полторы тышши записей. Запузыриваем процесс порождения дерева - во ((С)Крамаров). Не забываем прописывать свежеобретенные хэндлы... Или что-то вроде этого... А в datastore поиск быстрый-пребыстрый... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 21:14 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
Enlighten meНикогда бы не догадался. Это сильно. Экспрессивно. Первобытно как-то... Мне триста лет, я выполз из тьмы. (С) Макаревич. Ну все не так первобытно. Иногда проще обойтись без datastore. Создаём датасторе. В нем резервируем интовое поле под хэндл. Селектим туда несметные полторы тышши записей. Запузыриваем процесс порождения дерева - во ((С)Крамаров). Не забываем прописывать свежеобретенные хэндлы... Или что-то вроде этого... А в datastore поиск быстрый-пребыстрый... Ну да, поиск там вполне быстрый. Но к чему такие осложнения. Ежли можно посредством курсоров все из базы дергать? Правда тут появляеться проблема с поиском в дереве. Которая решаеться либо перебором handle, либо Вашей методикой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 21:21 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
autumnНу да, поиск там вполне быстрый. Но к чему такие осложнения. Ежли можно посредством курсоров все из базы дергать? Правда тут появляеться проблема с поиском в дереве. Которая решаеться либо перебором handle, либо Вашей методикой. Вот классическое подтверждение моего припева. За каким хреном вы курсоры используете, если на Powerbuildere пишете? Где вы это бранное слово услыхали? :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 21:33 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
ФилиппВот классическое подтверждение моего припева. За каким хреном вы курсоры используете, если на Powerbuildere пишете? Где вы это бранное слово услыхали? :-)) Хм, а в чем проблема? Чего в них плохого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2005, 21:36 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
Решена у меня подобная проблема давным давно ... Есть таблица в ~40000 записей. Никто ее всю в TreeView сразу не грузит. :) Заполняются уровни по мере необходимости (открытия) с помощью именно КУРСОРА. Пробовал через DataStore - тормоза. Ведь принцип заполнения DataStore и есть тот самый курсор. Это получается - заполни DataStore, а затем бегай по нему заполняя TreeView. Двойная работа. Я сравнивал по скорости - выигрыш курсора перед DataStore примерно 30%. Поиск происходит сл. образом. В базе есть процедура, которая возвращает последовательность узловых (в Вашем случае Label-ов) по уровням до искомого начиная от корневого (вот сдесь я использую DataStore). Ну а дальше понятно- с помощью FindItem двигаемся сверху вниз базируясь на полученной последовательности. Для каждого уровня FindItem вызывается один раз. Как получить handle с помощью FindItem я описывать не буду. На время перебора по дереву не забудьте отключить перерисовку. На машине из музея (Cel.300, 128Mb RAM, Win98, DataBase ASA8.03) до 15 уровня прога добирается ~2-3сек. ИМХО вполне прилично учитывая то, что во время заполнения еще происходит дополнительный анализ полученных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 11:56 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
PaulJBВедь принцип заполнения DataStore и есть тот самый курсор. Это где Вы такое вычитали? DECLARE CURSOR, FETCH да? У меня в справочнике 38000 записей, заполняется из DataStore по мере раскрытия узлов пользователем. Никаких тормозов нет. Через курсор быстрее не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 13:45 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
Посмотри в атташе. Я не так давно много всяких деревянных штучек написал - может, чего сгодится. Что ты просишь - есть в том числе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 14:13 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
Хм. Не прицепился :(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 14:15 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
NividimkaПосмотри в атташе. Я не так давно много всяких деревянных штучек написал - может, чего сгодится. Что ты просишь - есть в том числе. Спасиб. Погляжу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 14:18 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
PaulJBРешена у меня подобная проблема давным давно ... Есть таблица в ~40000 записей. Никто ее всю в TreeView сразу не грузит. :) Заполняются уровни по мере необходимости (открытия) с помощью именно КУРСОРА. Вопрос (изначальный) не звучал "Как правильно работать с многоуровневыми иерархическими данными средствами PB", не так ли? So, если есть желание поговорить именно об этом, то можно создать отдельную ветку или дописать ещё одну статью к икаровской серии для начинающих. IMHO, 'course. PaulJBВедь принцип заполнения DataStore и есть тот самый курсор.Чем докажете? PaulJBПоиск происходит сл. образом. В базе есть процедура, которая возвращает последовательность узловых (в Вашем случае Label-ов) по уровням до искомого начиная от корневого (вот сдесь я использую DataStore). Ну а дальше понятно- с помощью FindItem двигаемся сверху вниз базируясь на полученной последовательности. Для каждого уровня FindItem вызывается один раз. Вот с этого места поподробнее. Если я Вас правильно понял, то процедура вам выплёвывает что-то навроде 'Root_M\Branch_MN\Leaf_MN1' для параметра 'Leaf_MN1'. Соответственно, на каждом уровне вы всё-таки вынуждены проводить последовательный поиск, don't you? Как вы обходитесь одним FindItem для каждого уровня, откройте секрет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 14:34 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
Локшин Марк >Это где Вы такое вычитали? Кажись в книге по 5 ПБ или 6 точно уже не помню. Там было предупреждение про использование опции RetrieveAsNeeded. Упоминалось про то, что до завершения retrieve DW держит открытым курсор и при этом строки в курсоре могут быть заблокированы (см. Isolation Level). Может в более старших версиях уже переделали ... ? А как по вашему организуется срабатывание события RetrieveRow ? >У меня в справочнике 38000 записей, заполняется из DataStore по мере раскрытия узлов пользователем. Никаких тормозов нет. Через курсор быстрее не будет. А как Вы гарантируете соответствие данных в дереве и в базе? Ведь содержимое DataStore надо обновлять ? Каждый раз Retrieve для 38000 записей ? А так: юзер закрыл/открыл уровень - вот вам и свежие данные. 2 Enlighten me Если я Вас правильно понял, то процедура вам выплёвывает что-то навроде 'Root_M\Branch_MN\Leaf_MN1' для параметра 'Leaf_MN1'. Соответственно, на каждом уровне вы всё-таки вынуждены проводить последовательный поиск, don't you? Как вы обходитесь одним FindItem для каждого уровня ... Именно так. Конечно, приходится последовательно перебирать items на уровне, но ведь это не перебор всего дерева и Вы уверены что на выбранном уровне присутствует искомый элемент. Я немного не так выразился про FindItem за что прошу пардону у обчества. Имелось в виду ф-ция поиска по уровню, которая вызывается рекурсивно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 17:31 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
PaulJB Локшин Марк >Это где Вы такое вычитали? Кажись в книге по 5 ПБ или 6 точно уже не помню. Там было предупреждение про использование опции RetrieveAsNeeded. Упоминалось про то, что до завершения retrieve DW держит открытым курсор и при этом строки в курсоре могут быть заблокированы (см. Isolation Level). Может в более старших версиях уже переделали ... ? Не переделали. Здесь кто-нить про RetrieveAsNeeded говорил? В нормальном режиме нет курсора, а есть т.н. block read, который от курсора решительным образом отличается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2005, 19:51 |
|
||
|
Получение handle по имени items в TreeView
|
|||
|---|---|---|---|
|
#18+
PaulJBА как Вы гарантируете соответствие данных в дереве и в базе? Ведь содержимое DataStore надо обновлять ? Каждый раз Retrieve для 38000 записей ? А так: юзер закрыл/открыл уровень - вот вам и свежие данные. Гм. Произошло itempopulate, в DataStore откачалось содержимое текущего узла и вставилось в дерево. Никто естественно 38000 записей сразу не откачивает. Для обновления есть специальная кнопочка - "обновить". А то дерево - это такая структура... был узлом а стал листом, да при том совсем еще в другом месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2005, 10:59 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=32987338&tid=1338449]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 333ms |

| 0 / 0 |
