Automatyczne uzupełnienie treeView za pomocą numerów kategorii nadrzędnych

0

Bawiąc się w WebApi natrafiłem na zagwostke. Mam treeView i chce do niego wrzucić listę kategorii za pomocą doGetCatsData. Polecenie to zwraca dane "Nazwa kategorii.", "Identyfikator kategorii nadrzędnej (lub 0 dla kategorii głównych)." oraz "Pozycja kategorii wobec innych kategorii tego samego rzędu ". Jak powinien wyglądać kod aby automatycznie zostało to uzupełnione?
Użycie doGetCatsData

 
      CatInfoType[] ty = service.doGetCatsData(1, 0, false, webapiKey, out verKey, out verStr);
                  ty[i].catId.ToString(); 
                  ty[i].catName; 
                  ty[i].catParent.ToString(); 
                  ty[i].catPosition.ToString();

Kod za pomocą którego uzupełniam treeView

 
        private void button6_Click(object sender, EventArgs e)
        {
            TreeNode tNode;
            tNode = treeView1.Nodes.Add("Kategorie");

            treeView1.Nodes[0].Nodes.Add("1");
            treeView1.Nodes[0].Nodes[0].Nodes.Add("2");

            treeView1.Nodes[0].Nodes.Add("1");
            treeView1.Nodes[0].Nodes[1].Nodes.Add("2");
            treeView1.Nodes[0].Nodes[1].Nodes.Add("2");

            treeView1.Nodes[0].Nodes.Add("1");
            treeView1.Nodes[0].Nodes[2].Nodes.Add("2");
            treeView1.Nodes[0].Nodes[2].Nodes[0].Nodes.Add("3");
        }

dokumentacja doGetCatsData
http://allegro.pl/webapi/documentation.php/show/id,46#method-output

0

Zrób foreacha i wklej tu trochę przykładowych danych.

int i = 0;
foreach (CatInfoType item in ty)
{
    System.Diagnostic.Debug.WriteLine("Id: {0}, Name: {1}, Parent: {2}, Position: {3}", item[0], item[1], item[2], item[3]);
    if(++i>100)
        break;
}

Dane znajdziesz w View->Output

0

Wiem jak wykorzystuje się foreach ale reszty działania nie kumam. System.Diagnostic.Debug.WriteLine co to robi?

0

Sprawdź.
To samo co Console.WriteLine tylko wypisuje w oknie Output.

0

Jak mi to ma pomóc w wypisaniu kategorii jako drzewa w treeView?

0

Tobie nie wiem, ale ja mając przykładowe dane mógłbym popróbować to zrobić.

0

Nie testowane!!!
Nie biorę też pod uwagę parametru catPosition zakładam że są po kolei.

        TreeNode lastParentNode = null;
        bool AddNode(string parentId, string id, string text, TreeView treeView)
        {
            var newNode = new TreeNode(text);
            newNode.Tag = id;
            
            if(parentId == "0")
            {
                treeView.Nodes.Add(newNode);
                return true;
            }
            else if(lastParentNode!=null && lastParentNode.Tag.ToString() == parentId)
            {
                lastParentNode.Nodes.Add(newNode);
                return true;
            }
            else
            {
                foreach (TreeNode n in treeView.Nodes)
                {
                    lastParentNode = FindById(parentId, n);
                    if (lastParentNode != null) 
                        break;
                    else
                    {
                        lastParentNode.Nodes.Add(newNode);
                        return true;
                    }

                }
            }
            return false;
        }

        TreeNode FindById(string itemId, TreeNode rootNode)
        {
            foreach (TreeNode node in rootNode.Nodes)
            {
                if (node.Tag.Equals(itemId)) return node;
                TreeNode next = FindById(itemId, node);
                if (next != null) return next;
            }
            return null;
        }

I używasz tego tak:

int i = 0;
foreach (CatInfoType item in ty)
{
    if (AddNode(item[2], item[0], item[1], treeView1))
        i++;
}
  System.Diagnostic.Debug.WriteLine("Dodano {0}/{1}", i, ty.Length);

Jeśli się nie wysypie to na koniec w Outpucie sprawdź czy dodało wszystkie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1