예제 #1
0
파일: IndexBase.cs 프로젝트: Brinews/Code
 public CatalogHierarchyItem(Catalog catalog, CatalogHierarchyItem parent)
 {
     Content = catalog;
     Parent = parent;
     Childs = new List<CatalogHierarchyItem>();
 }
예제 #2
0
파일: IndexBase.cs 프로젝트: Brinews/Code
    private void ParseCatalogHierarchy()
    {
        List<Catalog> catalogs = GetCatalogs();

        //添加额外分类
        Catalog exCatalog = new Catalog();
        exCatalog.Code = "";
        exCatalog.Name = "中国成果";

        catalogs.Sort((x, y) => x.Code.Length - y.Code.Length);

        rootCatalog = new CatalogHierarchyItem(exCatalog, null);
        catalogMap.Add(rootCatalog.Content.Code, rootCatalog);

        List<int> lengthHistory = new List<int>();
        lengthHistory.Add(catalogs[0].Code.Length);

        for (int i = 0; i < catalogs.Count; ++i)
        {
            Catalog catalog = catalogs[i];

            //添加2位的一级编码
            if (catalog.Code.Length == 1)
            {
                CatalogHierarchyItem chItem = new CatalogHierarchyItem(catalog, rootCatalog);
                rootCatalog.Childs.Add(chItem);

                catalogMap.Add(catalog.Code, chItem);
            }
            else //添加后续分类编码
            {
                for (int j = lengthHistory.Count - 1; j >= 0; --j)
                {
                    int length = lengthHistory[j];
                    CatalogHierarchyItem parent;
                    if (catalogMap.TryGetValue(catalog.Code.Substring(0, length), out parent))
                    {
                        CatalogHierarchyItem item = new CatalogHierarchyItem(catalog, parent);
                        parent.Childs.Add(item);

                        catalogMap.Add(catalog.Code, item);
                        break;
                    }
                }
            }

            if (catalog.Code.Length > lengthHistory.Last())
                lengthHistory.Add(catalog.Code.Length);
        }
    }
예제 #3
0
파일: IndexBase.cs 프로젝트: Brinews/Code
    private void ReloadData()
    {
        ParseCatalogHierarchy();

        currentCatalog = ParseQuery("catalog", s => catalogMap[s], rootCatalog);
    }
예제 #4
0
파일: IndexBase.cs 프로젝트: Brinews/Code
    private void ParseCatalogHierarchy()
    {
        List<Catalog> catalogs = GetCatalogs();
        if (null == catalogs || catalogs.Count == 0)
        {
            Response.Redirect(StateGrid.GlobalVariables.GlobalResource.ERROR_PAGE+"?message=系统出错,请联系管理员");
            return;
        }
        catalogs.Sort((x, y) => x.Code.Length - y.Code.Length);

        rootCatalog = new CatalogHierarchyItem(catalogs[0], null);
        catalogMap.Add(rootCatalog.Content.Code, rootCatalog);

        List<int> lengthHistory = new List<int>();
        lengthHistory.Add(catalogs[0].Code.Length);

        for (int i = 1; i < catalogs.Count; ++i)
        {
            Catalog catalog = catalogs[i];

            for (int j = lengthHistory.Count - 1; j >= 0; --j)
            {
                int length = lengthHistory[j];
                CatalogHierarchyItem parent;
                if (catalogMap.TryGetValue(catalog.Code.Substring(0, length), out parent))
                {
                    CatalogHierarchyItem item = new CatalogHierarchyItem(catalog, parent);
                    parent.Childs.Add(item);

                    catalogMap.Add(catalog.Code, item);
                    break;
                }
            }

            if (catalog.Code.Length > lengthHistory.Last())
                lengthHistory.Add(catalog.Code.Length);
        }

        foreach (CatalogHierarchyItem item in catalogMap.Values)
        {
            item.Childs.Sort((child1, child2) => child1.Content.Code.CompareTo(child2.Content.Code));
        }
    }