|
поиск в TreeView
|
|||
---|---|---|---|
#18+
подскажите,пожалуйста,как осуществить поиск в TreeView :выбрана какая-то запись в 'дереве'..необходимо проверить наличие идентичных записей во всем 'дереве' и запомнить их ParentTreeItem! ,если таковые имеются..... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2015, 21:44 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
Использовать рекурсивную функцию, в которой будет вызываться FindItem с параметрами ChildTreeItem! и NextTreeItem! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2015, 22:51 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
VanoR, а каким образом сравнение осуществлять? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2015, 23:11 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
VanoR,можно небольшой пример??? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2015, 23:12 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
Примера у меня нет. Наверно в функции нужно создать переменную типа treeviewitem, затем по очереди перебирать все узлы с помощью FindItem(ChildTreeItem!,parent_item) и FindItem(NextTreeItem!,item)... Вытаскивать с помощью GetItem в переменную типа treeviewitem и в этой переменной смотреть необходимые данные, например в Label. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2015, 10:58 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
LeS_05, У меня поиск работает так. Может поможет. Реализовано в виде функции. Long ll_row Long il_queue[],ll_handle,li_next,ll_child,ll_qposition,li_level N_ds tmp_ds Long ll_date string ls_label ll_handle = atv_ltvs.FindItem(RootTreeItem!, 0) Do While ll_handle > 0 li_next = upperbound(il_queue) + 1 il_queue[li_next] = ll_handle ll_handle = atv_ltvs.FindItem(NextTreeItem!, ll_handle) Loop ll_qposition = 1 DO ll_handle = il_queue[ll_qposition] atv_ltvs.inv_levelsource.of_GetDataRow(ll_handle,tmp_ds, ll_row) ll_date = tmp_ds.GetItemNumber(ll_row,as_cldata) ls_label = tmp_ds.GetItemString(ll_row,as_cllabel) if ((ll_date = al_data and ls_label = al_label)) then // Условие для al_data,al_label - передаются в функцию atv_ltvs.ExpandAll(ll_handle) atv_ltvs.selectitem(ll_handle) return end if atv_ltvs.ExpandItem(ll_handle) ll_child = atv_ltvs.FindItem(ChildTreeItem!, ll_handle) atv_ltvs.CollapseItem(ll_handle) Do While ll_child > 0 li_next = upperbound(il_queue) + 1 il_queue[li_next] = ll_child ll_child = atv_ltvs.FindItem(NextTreeItem!, ll_child) Loop ll_qposition++ Loop until ll_qposition > upperbound(il_queue) P.S. дерево унаследовано от u_tvs ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2015, 11:27 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
LeS_05, Добавлю. я просто раскрываю дерево на найденном элементе, и прекращаю поиск. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2015, 11:30 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
А с какой, если не секрет, целью это делается? Просто, может, задачу можно решить как-то по другому? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2015, 12:59 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
PaulJB, нужно найти в какие еще узлы входит выбранный элемент. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2015, 13:20 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
LeS_05, а может PaulJB прав? Например поискать в источнике данных для дерева? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2015, 13:34 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
Raven A,искал..но смог реализовать только через рекурсивный запрос oracle, выполнение которого занимает не мало времени... из за использования connect by prior может,кто подскажет как сократить время выполнения(в общей сложности в таблицах 1,5 млн записей..и это все занимает ~1,5мин)? select distinct elem_id_kuda, prj_elem.elem_id, a.prim_kolvo from prj_primen a, prj_elem, prj_elem c where prj_elem.elem_id=a.elem_id and c.elem_id=a.elem_id_kuda and c.revision=a.num_izm and a.elem_id=:a start with a.elem_id=:b connect by prior a.elem_id=a.elem_id_kuda; ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2015, 13:46 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
LeS_05, Понятно, но я имел ввиду несколько другое. Не зная постановки задачи и контекста, просто поток мыслей, уж извините :) Исходя из допущений, что: - дерево надо строить в любом случае - данные уже "на борту" - данные - плоская табл. типа [node_id],[parent_id],[node_name] можно просто ids_TreeData.Filter( ... ) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2015, 14:10 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
Мда ... грузить полтора ляма в дерево - жестко :) Как я понял, то надо найти похожие записи и к ним вывести список узлов (для каждой)? Это дело для БД, билдер тут не причем. Я бы делал так (если правильно понял задачу): нашел записи, претенденты и для каждой найденной определил бы узлы с помощью sys_connect_by_path. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2015, 14:14 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
Oracle вообще очень интересная вещь, скорее даже не вещь, а философия. Решение данной задачи может быть основано на различных принципах (дерево, окно данных, синтетический ключ, вычисляемое поле, кластерный индекс, обратный индекс и т.д.). Если это разовая операция, то 1.5 минуты на 1.5 миллиона вполне себе приемлемое решение. Если нет - нужно оптимизировать. Как оптимизировать - смотреть задачу. Возможно просто не нужна такая куча действий и такой глобальный поиск с построением дерева. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2015, 15:29 |
|
поиск в TreeView
|
|||
---|---|---|---|
#18+
LeS_05может,кто подскажет как сократить время выполнения(в общей сложности в таблицах 1,5 млн записей..и это все занимает ~1,5мин)? Неплохо было бы привести план запроса. Не удивлюсь, если увижу там фуллскан. LeS_05 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
И у меня одного вызывают сомнения выделенные места? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2015, 19:31 |
|
|
start [/forum/topic.php?fid=15&fpage=8&tid=1335267]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
88ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 203ms |
0 / 0 |