2012-04-02 16 views
0

Ich muss eine Baumstruktur zwischen Kategorien und Unterkategorien entwickeln. Ich verwende einen Handler, um die Beziehung zu generieren.Erstellen von Baumstruktur aus Kategorien und Unterkategorien und deren Unterkategorien

Zum Beispiel meine SQL-Tabelle enthält

GlobalID for top-level parents 1000 

Id  CategoryName   ParentId 
1  toyota    1000 
2  ford     1000 
5  prius     1 
6  prius SP    5 
7  prius SP blue   6 
8  focus     2 
9  mondeo    2 
10  mustang    2 
11  focus EX    8 
... 

So sind die Kategorien sieht aus wie

 
toyota 
    prius 
    prius SP 
     prius PS blue 
    yaris 
    auris 

ford 
    focus 
    focus EX 
    mondeo 
    mustang 

etc


dieses Im gehend zu tun, um eine rekursive Programm whih Schleife Thorugh seine Kinderkategorien.

Aber wie kann ich die Baumstruktur hinzufügen und es an die aspx-Seite zurücksenden.

Der Code Ich verwende ist

// To get all the parent categories 

List<Category> objChildren = new List<Category>(); 

public List<Category> GetCategories(int categoryId) 
{ 
    IQueryable<Category> cats = from ca in db.Categories 
           where ca.ParentId == categoryId && ca.ParentId != nonPageId 
           select ca; 

    return cats.ToList(); 
} 

List<Category> parentCategories = GetCategories(1000); 
foreach(Category _category in parentCategories) 
{ 
    GetChildCats(_category); 
} 

public void GetChildCats(Category cat) 
{ 
    objChildren.Add(cat); 

    List<Category> cats = GetCategories(cat.CatId); 

    if (cats.Count != 0) 
    { 
    foreach (Category cate in cats) 
    {    
     GetChildCats(cate);    
    } 
    } 
} 

Wie ein JSON-Baumstruktur auf der aspx Seite zurückzukehren wie diese

</pre> 
So the categories looks like 
<pre> 
[0] => toyota 
     [0] => prius 
       [0] => prius SP 
         [0] => prius PS blue 
     [1] => yaris 
     [2] => auris 

[1] => ford 
     [0] => focus 
       [0] => focus EX 
     [1] => mondeo 
     [2] => mustang 
</pre> 

Antwort

0

Was könnten Sie tun, ist stattdessen 1000 Gebrauch null verwenden . Das bedeutet, dass die Kategorie kein Elternteil (und kein Elternteil mit der ID = 1000) hat.

Dann ordnen Sie die Beziehung (Kategorie Eltern und IList Kinder), und Sie werden in der Lage sein, dies zu tun:

var parents = db.Categories.Where(x => x.Parent == null); 

und die Kategorien themself wird die Baumstruktur Sie wollen, und Sie werden in der Lage sein zu verwenden, JSON-Serializer

+0

Hallo Ich denke, die Eltern-ID macht keinen Unterschied, wie es Null oder 1000 gehalten werden kann. Aber ich kämpfe beim Hinzufügen der Child-Kategorie Liste und seine Kinder in einer verschachtelten Weise das oben erwähnte JSON-Format ausgeben. Ich kämpfe darum, diese Ausgabe zu bekommen. Danke – user840491

+0

Es macht Sinn, wenn EF versucht, ein Elternteil mit der ID 1000 zu finden. Auch aus der Datenbankperspektive, wenn Sie 1000 setzen, können Sie die referenzielle Integrität nicht nutzen, Sie können keine FK setzen Dort. Wenn Sie das Objektmodell haben, wird jeder JSON-Serializer die Aufgabe übernehmen. – ivowiblo

Verwandte Themen