Вверх ↑
Этот топик читают: Гость
Ответов: 171
Рейтинг: 19
#1: 2008-12-09 19:58:37 ЛС | профиль | цитата
Вот такая задача возникла, есть дерево
категория 1
категория 2
категория 3
итд...

и база данных с товарами по категориям . Запрос выдает строки в виде №категории; наименование. Вот, и нужно это все добавить в дерево, каждый товар в соответствующий ему родительский узел.
карма: 0

0
Ответов: 3851
Рейтинг: 159
#2: 2008-12-09 20:18:49 ЛС | профиль | цитата
выделяешь категорию, а потом оно вставляется в неё..
карма: 0
начавший
0
Ответов: 171
Рейтинг: 19
#3: 2008-12-09 20:36:11 ЛС | профиль | цитата
нужно чтобы автоматом вставлялось
карма: 0

0
Ответов: 3851
Рейтинг: 159
#4: 2008-12-09 20:45:21 ЛС | профиль | цитата
найди индекс строки с нужной категорией..
карма: 0
начавший
0
Администрация
Ответов: 15295
Рейтинг: 1519
#5: 2008-12-09 20:50:41 ЛС | профиль | цитата
я бы советовал использовать TreeViewTrain - в задачах отображения данных из БД он в разы проще стандартного решения. Вот пример добавления товара в категорию
code_10913.txt

карма: 27
0
файлы: 1code_10913.txt [1.8KB] [190]
Ответов: 3851
Рейтинг: 159
#6: 2008-12-09 20:52:54 ЛС | профиль | цитата
Если с TreeView, то можно так code_10914.txt примерно..
карма: 0
начавший
0
файлы: 1code_10914.txt [1KB] [175]
Администрация
Ответов: 15295
Рейтинг: 1519
#7: 2008-12-09 21:02:48 ЛС | профиль | цитата
в предыдущем примере можно нагляжно продемонстрировать причины, по которым было решено сделать альтернативное дерево для отображения наследуемых данных. Если начальную структуру изменть вот таки образом

категория 1
(
категория 3
)
категория 2
категория 3
(т.е. имя товара совпадает с именем категории), то корректно добавить что-то в "категория 3" станет невозможно. Можно посмотреть, что из этого получается:

Add(TreeView,10768177,294,126)
{
Left=50
Top=80
Width=195
Height=140
Strings=#11:категория 1|1:(|11:категория 3|1:)|12:категория 2 |11:категория 3|
Icons=[]
Point(doSelect)
}
Add(ArrayEnum,7705896,301,203)
{
link(onItem,9887738:doCompare,[])
link(Array,10768177:Array,[])
}
Add(ComboBox,14741568,364,126)
{
Left=45
Top=15
Width=90
Height=21
Strings=#11:категория 1|12:категория 2 |11:категория 3|
}
Add(Edit,5880332,196,63)
{
Left=145
Top=15
Width=140
Text="наименование"
}
Add(Button,6882987,238,203)
{
Left=285
Top=120
link(onClick,7705896:doEnum,[])
}
Add(If_else,9887738,364,203)
{
link(onTrue,373127:doEvent1,[(408,209)(408,277)(136,277)(136,167)])
link(Op2,14741568:String,[])
}
Add(Hub,373127,147,161)
{
link(onEvent1,13482077:doData,[])
link(onEvent2,11654637:doData,[(187,174)(187,132)])
}
Add(DoData,13482077,238,161)
{
link(onEventData,10768177:doSelect,[])
link(Data,7705896:Index,[(244,149)(279,149)(279,247)(314,247)])
}
Add(DoData,11654637,196,126)
{
link(onEventData,10768177:doAdd,[])
link(Data,5880332:Text,[])
}
решить эту проблему в общем случае на данном элементе невозможно. Поэтому стоит учесть данный момент при выборе одного из предложенных способа решения.
карма: 27
0
Ответов: 171
Рейтинг: 19
#8: 2008-12-09 21:21:14 ЛС | профиль | цитата
Спасибо, будем разбираться


карма: 0

0
Ответов: 3851
Рейтинг: 159
#9: 2008-12-09 22:13:15 ЛС | профиль | цитата
Dilma писал(а):
(т.е. имя товара совпадает с именем категории), то корректно добавить что-то в "категория 3" станет невозможно
Dilma писал(а):
решить эту проблему в общем случае на данном элементе невозможно.
Э, зачем пугать начинающих До исторического материализма (появления Train) люди тоже жили code_10916.txt наверное потому, что не знали о "невозможности" (народная мудрость - ну и что, что водки нет, чтож теперь не пить чтоли)

PS: Считаю элемент TreeViewTrain очень нужным и уважаю его автора, просто не люблю категоричности в суждениях. Надеюсь, что справка (или примеры) на элемент появится в неочень далёком будущем..
карма: 0
начавший
0
файлы: 1code_10916.txt [1.5KB] [156]
Администрация
Ответов: 15295
Рейтинг: 1519
#10: 2008-12-10 10:59:46 ЛС | профиль | цитата
Андрей., а вот зря
Андрей. писал(а):
просто не люблю категоричности в суждениях

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

поясняю: "в общем случае" у программистов(коими считаю и пользователей hiasm в том числе) означает наличие такого алгоритма, который верно работает при любых разумных данных, полученных из-вне. Приведенные же примеры к сожалению демонстрируют обратное - алгоритм меняется всякий раз как я меняю исходные данные. Для последнего примера не верно будет обрабатываться такое исходное дерево:

категория 1
(
категория 3
)
категория 2
(
категория 3
)
категория 3

Я не стал приводить доказательство утверждения только потому, что вроде бы из примера должно быть очевидно почему задача не имеет общего решения. Теперь-то думаю все совсем очевидно

Андрей. писал(а):
Считаю элемент TreeViewTrain очень нужным и уважаю его автора

Андрей., автором обоих элементом к счастью являюсь я и в полной мере представляю себе условия и ограничения по использованию каждого из них. Об этих условиях тут и было сообщено. Задача сравнения же элементов не ставилась - это тема к вопросу топика никак не относится
карма: 27
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#11: 2008-12-10 12:49:48 ЛС | профиль | цитата
Dilma писал(а):
автором обоих элементом к счастью являюсь я

А почему "к счастью"
карма: 22

0
Ответов: 3851
Рейтинг: 159
#12: 2008-12-10 13:54:04 ЛС | профиль | цитата
Dilma писал(а):
алгоритм меняется всякий раз как я меняю исходные данные.
для поставленной задачи (вложенность не далее одного уровня) конечно же придётся сохранять и содержимое StrList ибо он работает в паре с таблицей, и тогда всё будет корректно работать при любых добавляемых данных. Но в общем случае, при большей вложенности например, я конечно соглашусь ибо не знаю как его решить..
карма: 0
начавший
0
12
Сообщение
...
Прикрепленные файлы
(файлы не залиты)