2012-04-02 3 views
0

Мне нужно разработать древовидную структуру между категориями и подкатегориями. Я использую обработчик для создания отношения.Структура древовидной структуры из категорий и подкатегорий и ее подкатегорий

Например мой SQL таблица содержит

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 
... 

Так категории выглядит

 
toyota 
    prius 
    prius SP 
     prius PS blue 
    yaris 
    auris 

ford 
    focus 
    focus EX 
    mondeo 
    mustang 

и т.д.


Для этого Im используя рекурсивную программу whih будет цикл Копание его дочерние категории.

Но как добавить древовидную структуру и отправить ее обратно на страницу aspx.

код я использую

// 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);    
    } 
    } 
} 

Как вернуть структуру JSON дерева на страницу ASPX, как этот

</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> 

ответ

0

Что вы можете сделать, это вместо того, чтобы использовать 1000 использовать нуль , Это будет означать, что категория не имеет родителя (а не родителя с Id = 1000).

Затем сопоставьте отношения (Категория Родитель и IList детей), и вы будете в состоянии сделать это:

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

и категории сам себе будет структура дерева вы хотите, и вы будете иметь возможность использовать любой сериализатор JSON.

+0

Привет, я думаю, что родительский идентификатор не имеет никакого значения, поскольку его можно сохранить нулевым или 1000. Но я стараюсь добавить дочерний список категорий и его детей вложенным образом для вывода вышеупомянутого формата JSON. Я изо всех сил пытаюсь получить этот результат. Спасибо – user840491

+0

Имеет смысл, когда EF пытается найти родителя с Id 1000. Также с точки зрения базы данных, если вы ставите 1000, вы не сможете использовать референциальную целостность, вы не сможете поставить FK там. Если у вас есть объектная модель, то любой сериализатор JSON выполнит эту работу. – ivowiblo

Смежные вопросы