|
Создание базы данных с Treeview
|
|||
---|---|---|---|
#18+
Claymore, Не совсем понятно что бы хотите услышать своим "апом". Вам же уже много кто сказал - id,parentid как правило... как правило оба int(id даже автоинкиментом можно сделать) Ну а ключами нодов как вариант будут "_"+str(id) Если три поля в таблице кажутся "правильнее" - дело Ваше, Вам сопровождать ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 14:43 |
|
Создание базы данных с Treeview
|
|||
---|---|---|---|
#18+
rock-n-roll, Ды понимаешь я не соображу как код написать в init (V_V) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 14:58 |
|
Создание базы данных с Treeview
|
|||
---|---|---|---|
#18+
Claymore, в смысле как- а что он должен делать? Наполнять первый уровень тривью?(кстати, если поискать по этому же форуму-полно объяснений почему рекомендуется строить только "необходимое отображать в данный момент")- так и этому полно примеров на этом же форуме Дай перефразирую твой вопрос-"Есть таблица id,parentid,name. Нужны обобщенные методы по наполнению тривьюхи" Так? Тогда делается это примерно так: Рисуется метод (ADDLEVEL) который будет строить уровень по переданному ParentID также этот метод добавит по одному "ФИКТИВНОМУ" узлу для всех имеющих потомков в таблице только для того чтобы появился крест(здесь извини лень вырезать .is_color и .is_ico считай что .F.) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
Метод EXPEND тривьюхи если есть фиктивный-удаляет его и строит следующий уровень, если нет значит ветвь уже построена ранее Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Итого что может быть в ините.. Ну наверно ADDLEVEL(0,.T.) ну если все таки хочется придать "полуразвернутый вид" пару EXPEND А я вообще правильно тебя понял? Если да то не ленись, пошукай по форуму-сее уже обсуждалось и не раз ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 16:45 |
|
Создание базы данных с Treeview
|
|||
---|---|---|---|
#18+
ClaymoreВладимирМ, Только "Вариант 2" остальные исключаются! Это Вы сейчас так думаете. Причем, насколько я понимаю, думаете только Вы. Мнением пользователей Вы не интересовались. О чем я и говорю. TreeView - друг ОДНОГО человека. В данном случае персонально Ваш. ClaymoreЯ тут подумал, правильнее таблица будет выглядеть так: Не то, чтобы описанная структура была не правильной, но она избыточна. Вам придется кроме генерации значения id еще как-то "сконструировать" генератор значения key. Да, TreeView требует в качестве значения ключа узла символьное значение. Но ведь можно символьное значение получать "на лету" (в процессе построения дерева) из числового значения id. Например, переведя id в строку и добавив какой-нибудь символ. Например, "_". Другими словами, вполне достаточно будет иметь такую структуру Код: sql 1. 2. 3. 4. 5. 6. 7.
А при заполнении TreeView формировать значение ключа примерно так Код: sql 1.
ClaymoreНе могу сообразить как правильно написать код в init формы form1, помогите) Существует 2 принципиальные стратегии заполнения TreeView Вариант 1 Сразу заполнить все узлы дерева на всех уровнях вложенности Недостаток: при большом количестве узлов дерева потребует много времени на его заполнения. С точки зрения пользователя, форма будет открываться очень долго. Правда, понятие "много узлов" сильно зависит от железа. Т.е. "много" - это когда время открытия формы больше 2..3 секунд. А сколько узлов можно успеть создать за это время напрямую зависит от используемого железа. От структуры дерева и алгоритма его наполнения время построения дерева зависит слабо. Вариант 2 При открытии формы заполняется только первый уровень. А остальные уровни заполняются "по требованию". Обычно в момент первого раскрытия соответствующего узла. Так работает проводник в Windows. Оба варианта требуют не очевидного программирования. Не сложного, а именно не очевидного. Не привычного. Сразу заполнить все узлы дерева на всех уровнях вложенности Проблема в том, что в TreeView невозможно сначала создать дочерний узел, а потом - родительский. Необходимо строить дерево строго "сверху вниз". Сначала родителя, потом потомка. На первый взгляд кажется ничего сложного. Но это при "гладкой" структуре заполнения таблицы как в примере. А если структура данных будет не "гладкая", ну, например idparentid102153102150 Т.е. не получится просто просканировать таблицу сверху вниз и последовательно создавать узлы в дереве. Необходимо сначала "выстроить" записи в нужной последовательности. Замечу, что "хитрый индекс" здесь не поможет. Если не создавать дополнительных полей сортировки с "обвязкой" в виде триггеров для поддержания этих полей в актуальном состоянии, то возможны два решения 1. Рекурсия 2. "Бесконечный" цикл с исключением ранее использованных значений Системным ограничением FoxPro является ограничение на количество процедур, вызванных одна из другой. В данном случае это означает ограничение на количество рекурсий или количество уровней дерева. Для VFP9 - по умолчанию не более 128 вложенных процедур. Для младших версий - не более 32. Если рассматривать решение с бесконечным циклом, то можно так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 17:09 |
|
|
start [/forum/topic.php?fid=41&gotonew=1&tid=1582714]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
8ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 175ms |
0 / 0 |