Topic: Сортировка по узлу TreeView
Приветствую всех!
Товарищи, подскажите как штатными средствами программы реализовать = при выборе узла в TreeView, хочу видеть в гриде все дочерние записи всех скрытых элементов выделенного узла?
My Visual Database → Russian → Сортировка по узлу TreeView
Приветствую всех!
Товарищи, подскажите как штатными средствами программы реализовать = при выборе узла в TreeView, хочу видеть в гриде все дочерние записи всех скрытых элементов выделенного узла?
Вы задачу уточните. А то непонятно: узел выделяете в TreeView, в каком-то гриде хотите видеть все скрытые элементы выделенного узла...
Дочерние записи бывают 1) конкретного узла. 2) конкретного узла и все вложенные.
Скрытые элементы бывают 1) свёрнутые дочерние элементы 2) visible = false
P.S. А тема вообще про сортировку.... вы уж определитесь ))))
Если Вас не затруднит, ознакомьтесь с примером... Мне хотелось бы, что бы при выделении узла "велосипеды" в "дереве", в таблгрид1 от сортировались и 2х и 3х колесные...
Привет,
Это помогает?
По хорошему для такой задачи нужны интервальные деревья, но поскольку в MVDB их нет, то подойдёт SQL-запрос и процедура, которая возвращает список ID для конечных дочерних узлов (листьев) заданного узла дерева:
function GetSQLIDs( ARow:integer ):string;
// возвращает список ID для всех его дочерних элементов, являющихся конечными элементвми дерева
var
tmpChildCount: integer;
tmpRow: integer;
begin
Result := '';
if ARow <> -1 then
begin
if Form1.TreeView1.HasChildren( ARow ) then
begin
tmpRow := Form1.TreeView1.GetFirstChild( ARow );
repeat
if Result <> '' then
Result := Result + ',';
Result := Result + GetSQLIDs( tmpRow );
tmpRow := Form1.TreeView1.GetNextSibling( tmpRow );
until tmpRow = -1;
end
else
Result := IntToStr( Form1.TreeView1.dbIndexToID( ARow ) );
end;
end;
procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
// ShowMessage( GetSQLIDs( Form1.TreeView1.SelectedRow ) );
Form1.Button1.dbSQL := 'SELECT name FROM test WHERE id_testtree in ('+GetSQLIDs( Form1.TreeView1.SelectedRow )+')';
end;
Пример будет работать для любой конфигурации дерева, при относительно небольшом числе узлов (каком именно - сказать затрудняюсь. Думаю, это будет зависеть от СУБД).
Решение SQLite рекурсивным запросом.
Решение SQLite рекурсивным запросом.
Лучшее решение!
Если не ошибаюсь, в MySQL начиная с версии 8.х тоже есть поддержка рекурсивных запросов.
k245, sparrow, derek, огромное спасибо за участие и потраченное время! Все решения по своему интересны и помогают людям с недостаточным объемом знаний. Благодарю вас!
k245, sparrow, derek, thank you so much for your participation and time spent! All solutions are interesting in their own way and help people with insufficient knowledge. Thank you!
My Visual Database → Russian → Сортировка по узлу TreeView
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi