У меня есть задание в «управлении проектами». Я должен назначить модули, которые также могут быть подмодулями, поэтому я хочу добавить рекурсивные подмодули к модулям.Delphi TTreeNode рекурсивно присоединяет дочерние узлы к родительскому узлу
Пример:
Р (проект) Модули (М1, М2, М3, М4). В модуле M1 будут подмодули (M1S1, M1S2, M1S3), а под подмодулем 1 (M1S1) может быть много подмодулей (M1S1S1, M1S1S2, M1S1S3) и т. Д.
Я сделал этот код, используя Recursion и TTreeNode, но я чувствую, что проблема связана с условием.
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
lGlblProjID := 1;
lGlblProjName := 'Project';
ADOConnectionListner.Connected := true;
try
if ADOConnectionListner.Connected then
begin
RootNode := TreeView2.Items.Add(nil, lGlblProjName);
getSubChild(lGlblProjID, RootNode);
end;
except
on E: Exception do
begin
ShowMessage('Exception Class = ' + E.ClassName);
end;
end;
end;
procedure TForm2.getSubChild(var Pid: Integer; var SubRoot: TTreeNode);
var
lcount, I, lcurrentID: Integer;
lcurrentName: String;
lModuleNode: TTreeNode;
begin
// ShowMessage(IntToStr(Pid)+ ' '+SubRoot.Text);
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM treetab Where parent_id =:value1');
ADOQuery1.Parameters.ParamByName('value1').Value := Pid;
ADOQuery1.Active := true;
lcount := ADOQuery1.RecordCount;
for I := 0 to lcount - 1 do
begin
lcurrentID := ADOQuery1.FieldByName('id').AsInteger;
lcurrentName := ADOQuery1.FieldByName('name').AsString;
ShowMessage(' id ' + IntToStr(lcurrentID) + ' dd ' + lcurrentName); // print valu of i
if ((lcurrentID <> 0)and (SubRoot.Text <> '')) then //or
begin
lModuleNode := TreeView1.Items.AddChild(SubRoot, lcurrentName);
getSubChild(lcurrentID, lModuleNode);
end else // if
// lcurrentID = 0
ShowMessage('end reached');
// TreeView1.Items.AddChild(SubRoot, ADOQuery1.FieldByName('name').AsString);
ADOQuery1.Next;
//*********
end;
end;
Я хочу, чтобы получить все вложенные модули для конкретного проекта, как и в данном случае проект только с ID = 1.
Что «оператор условия» вы говорите, у вас возникли проблемы с, и что ваше беспокойство по поводу того, что нельзя? – MartynA
рассмотреть в рамках подвида есть еще одна запись сказать S1 тогда, так как его тогда последний лист возврата SQL ноль и дерево строится половина только P1 -SP -ssp -s1 и затем дерево ломается. – user3036212