コード例 #1
0
ファイル: Details.aspx.cs プロジェクト: dmziryanov/ApecAuto
        protected void Page_PreRender( object sender, EventArgs e )
        {
            using (var dc = new DCFactory<CmsDataContext>())
            {
                var groups = dc.DataContext.CatalogItems.GroupBy( c => c.ParentItemID ).ToDictionary( g => g.Key ?? 0 );

                if( groups.Count != 0 )
                {
                    var list = new List<object>();
                    var stack = new Stack<KeyValuePair<CatalogItemLink,int>>();

                    var tmp = new CatalogItemLink();

                    foreach( var item in groups[ 0 ].OrderByDescending( c=>c.CatalogItemPriority ) )
                    {
                        if (item.BannerCount > 1)
                        {
                            for (byte i = 0; i < item.BannerCount; i++)
                            {
                                tmp = tmp.FullDeepCopy(dc.DataContext, BannerID, item, i);
                                stack.Push(new KeyValuePair<CatalogItemLink, int>(tmp, 0));
                            }
                        }
                        else
                        {
                            tmp = tmp.FullDeepCopy(dc.DataContext, BannerID, item, 0);
                            stack.Push(new KeyValuePair<CatalogItemLink, int>(tmp, 0));
                        }
                    }

                    while( stack.Count != 0 )
                    {
                        var node = stack.Pop();

                        list.Add( new { CatalogItemLink = node.Key, Level = node.Value } );

                        if (node.Key.Position > 0) continue;

                        if( groups.ContainsKey( node.Key.CatalogItemID ) )
                        {
                            foreach( var item in groups[ node.Key.CatalogItemID ].OrderByDescending( c => c.CatalogItemPriority ) )
                                if (item.BannerCount > 1)
                                {
                                    for (byte i = 0; i < item.BannerCount; i++)
                                    {
                                        tmp = tmp.FullDeepCopy(dc.DataContext, BannerID, item, i);
                                        stack.Push(new KeyValuePair<CatalogItemLink, int>(tmp, node.Value + 1));
                                    }
                                }
                                else
                                {
                                    tmp = tmp.FullDeepCopy(dc.DataContext, BannerID, item, 0);
                                    stack.Push(new KeyValuePair<CatalogItemLink, int>(tmp, node.Value + 1));
                                }
                        }
                    }

                    _repeater.DataSource = list;
                    _repeater.DataBind();
                }

            }
        }
コード例 #2
0
ファイル: Banners.cs プロジェクト: dmziryanov/ApecAuto
 public CatalogItemLink FullDeepCopy(CmsDataContext dc, int bannerID, CatalogItem item, byte position)
 {
     var tmp = new CatalogItemLink();
     tmp.DeepPropertiesCopy(item);
     tmp.Position = position;
     tmp.Visible = IsVisibleByBannerID(dc, bannerID, tmp.CatalogItemID, position);
     tmp.Banded = IsBanded(dc, bannerID, tmp.CatalogItemID, position);
     return tmp;
 }