Topic: TTreeView get the name of the root node

Good day!
There is a form on which the TreeView is created and the data is cleaned. I can not get a value from the horse assembly.
Thank you in advance!

Translation from Google.

===========================

Доброго времени суток!
Есть форма на которой создается TreeView и отбражаются данные. Не могу получить значение из коневого узла.
Заранее всем спасибо!

Перевод с Гугл.

Post's attachments

Attachment icon TreeCity1.rar 299.46 kb, 156 downloads since 2022-04-21 

I'm just learning

Re: TTreeView get the name of the root node

Ronin751 wrote:

Доброго времени суток!
Есть форма на которой создается TreeView и отбражаются данные. Не могу получить значение из коневого узла.
Заранее всем спасибо!

dbForeignKey - Определяет, к какому внешнему ключу таблицы базы данных принадлежит данный компонент. При необходимости, можно указать имя таблицы.
   
http://myvisualdatabase.com/doc_ru/script_treeview.html

Re: TTreeView get the name of the root node

Sibprogsistem, спасибо Вам огромное за то, что обратили внимание на тему и уделили ей время!
Спасибо за Ваш совет, но к сожалению, dbForeignKey не подойдет, т.к. относится к TdbTreeView, а в данном случае используется TTreeView.

========================

Sibprogsistem, thank you so much for noting the attention on the topic and paid her time!
Thanks for your advice, but unfortunately, DBforeignKey will not suit, because Refers to TDBTreeView, and in this case the TTreeView is used.

I'm just learning

Re: TTreeView get the name of the root node

Для себя нашел вариант решения задачи:
Поскольку свойтво Node.Data устанавливается только для определенных позицый, добавил к ниму еще и Node.StateIndex . И по нему отбираю нужное мне значения из нужных таблиц.

procedure TreeViewOnDoubleClick(Sender: TObject);
begin

     if TreeView.Selected.Data=0 then begin
         exit;
     end else
     begin

         IF TreeView.Selected.StateIndex=1 Then Begin
              //Some Code
         End Else
         Begin
              //Some Code
         End;

     end;
end;

procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
    treenode, treenode1, treenode2,treenode3 : TTreenode;
    sWorks : TDataSet;
    sHOUSE,sPOD,sST,sKV:String;
    sSQL:string;
begin
    Tree_Set;

    Treeview.Items.BeginUpdate;

    sSQL:='SELECT "дом."||HOUSE.dom||ifnull("-"||HOUSE.let,"")||ifnull(", корп."||HOUSE.korp,""), "под."||H_KV.pod, "ст."||H_KV.st, "кв."||H_KV.kv, HOUSE.segment, STREET.id, ';
    sSQL:=sSQL+'(HOUSE.id||STREET.street||ifnull("дом."||HOUSE.dom,"")||ifnull("под."||H_KV.pod,"")||ifnull("ст."||H_KV.st,"")||ifnull("кв."||H_KV.kv,"")) as full_dom, HOUSE.id, H_KV.id ';
    sSQL:=sSQL+'FROM STREET LEFT JOIN HOUSE ON HOUSE.id_STREET=STREET.id LEFT JOIN H_KV ON H_KV.id_HOUSE=HOUSE.id WHERE STREET.id="'+IntToStr(Form1.ComboBox1.dbItemID)+'" ';
    sSQL:=sSQL+'ORDER BY full_dom';

    sHOUSE:='';sPOD:='';sST:='';sKV:='';    

    SQLQuery(sSQL, sWorks);

    While not sWorks.EOF do Begin
            IF sWorks.Fields[4].AsString='Многоэтажный' Then Begin
                IF sHOUSE<>sWorks.Fields[0].AsString Then Begin
                    sHOUSE:=sWorks.Fields[0].AsString;
                    treenode := Treeview.Items.Add(nil,sWorks.Fields[0].AsString);
                end;
                IF sPOD<>sHOUSE+sWorks.Fields[1].AsString Then Begin
                    sPOD:=sHOUSE+sWorks.Fields[1].AsString;
                    treenode1 := Treeview.Items.AddChild(treenode,sWorks.fields[1].asstring);
                End;
                IF sST<> sHOUSE+sPOD+sWorks.Fields[2].AsString Then Begin
                    sST:=sHOUSE+sPOD+sWorks.Fields[2].AsString;
                    treenode2 := Treeview.Items.AddChild(treenode1,sWorks.Fields[2].AsString);
                End;
                IF sKV<>sHOUSE+sPOD+sST+sWorks.Fields[3].AsString Then Begin
                    sKV:=sHOUSE+sPOD+sST+sWorks.Fields[3].AsString;
                    treenode3 := Treeview.Items.AddChild(treenode2,sWorks.Fields[3].AsString);
                    treenode3.Data := sWorks.fields[8].AsInteger;
                    treenode3.StateIndex := 1;
                End;
            End else
            Begin
                IF sWorks.Fields[3].AsString>'' Then Begin
                    IF sHOUSE<>sWorks.Fields[6].AsString Then Begin
                        sHOUSE:=sWorks.Fields[6].AsString;
                        treenode := Treeview.Items.Add(nil,sWorks.Fields[0].AsString+', '+sWorks.Fields[3].AsString);
                        treenode.Data := sWorks.fields[8].AsInteger;
                        treenode.StateIndex := 1;
                    End;
                End else
                begin
                    IF sHOUSE<>sWorks.Fields[6].AsString Then Begin
                        sHOUSE:=sWorks.Fields[6].AsString;
                        treenode := Treeview.Items.Add(nil,sWorks.Fields[0].AsString);
                        treenode.Data := sWorks.fields[5].AsInteger;
                        treenode.StateIndex := 0;
                    End;
                end;
            end;
        sWorks.Next;
        End;
    sWorks.Free;
    Treeview.Items.EndUpdate;
end;

=====================================

For myself, I found a solution to the problem:
Since Node.Data is installed only for certain position, added to Node.StateIndex. And by him, select the values you need from the desired tables.

I'm just learning