public static DIC_MySecondDictionaryFilter CreateDefault(MainPageUrlBuilder url, DBDataContext db, bool showHistory)
        {
            var filter = new DIC_MySecondDictionaryFilter();
            var newUrl = url != null?url.Clone() : new MainPageUrlBuilder();

            newUrl.ShowHistory = showHistory;
            newUrl.SelectMode  = "none";
            newUrl.ViewMode    = "none";
            filter.SetUrl(newUrl);
            filter.SetDB(db);
            filter.ShowHistory = showHistory;
            return(filter);
        }
        public static DIC_MySecondDictionaryFilter CreateDefault(MainPageUrlBuilder url, DBDataContext db, bool showHistory, List <MainPageUrlBuilder.FilterParameter> controlFilterParameters)
        {
            var filter = new DIC_MySecondDictionaryFilter();
            var newUrl = url != null?url.Clone() : new MainPageUrlBuilder();

            newUrl.ShowHistory = showHistory;
            newUrl.SelectMode  = "none";
            newUrl.ViewMode    = "none";
            foreach (var item in controlFilterParameters)
            {
                newUrl.ControlFilterParameters.Add(item.Clone());
            }
            filter.SetUrl(newUrl);
            filter.SetDB(db);
            filter.ShowHistory = showHistory;
            return(filter);
        }
예제 #3
0
 /// <summary>
 /// Обход по дочерним для определения ссылок на журналы
 /// </summary>
 /// <param name="urlBuilder"></param>
 /// <param name="detectedMenu"></param>
 /// <returns></returns>
 protected MainPageUrlBuilder InitMenuByChilds(MainPageUrlBuilder urlBuilder, bool detectedMenu)
 {
     if (!detectedMenu)
     {
         //если урл не определен, то обходим по дочкам и смотрим более подходящий
         var list = new List <MainPageUrlBuilder>();
         foreach (var item in Childs)
         {
             item.Parent = this;
             var itemUrl = item.InitMenu(urlBuilder.Clone(), false);
             if (itemUrl != null)
             {
                 list.Add(itemUrl);
             }
         }
         MainPageUrlBuilder resultUrl = null;
         if (list.Count == 1)
         {
             resultUrl = list[0];
         }
         else if (list.Count > 0)
         {
             #region определение более подходящего меню
             MainPageUrlBuilder maxUrl = null;
             var maxValue = 0;
             foreach (var itemUrl in list)
             {
                 var countData = itemUrl.QueryParameters.Keys.
                                 Where(key => key.EndsWith(".id"));
                 if (countData.FirstOrDefault() == null)
                 {
                     continue;
                 }
                 var maxInner = countData.
                                Select(key => key.Count(c => c == '.')).
                                Max();
                 if (maxInner > maxValue)
                 {
                     maxValue = maxInner;
                     maxUrl   = itemUrl;
                 }
             }
             resultUrl = maxUrl ?? list[0];
             #endregion
         }
         if (resultUrl == null)
         {
             return(null);
         }
         //если определяется нормальная ссылка, то обходим дочек еще раз
         foreach (var item in Childs)
         {
             if (item.DetectedUrlBuilder != resultUrl)//пропускаем тот журнал что вернул урл
             {
                 var url = resultUrl.Clone();
                 MoveReferenceToChilds(item, GetMenuItem(), url);
                 item.InitMenu(url, true);
             }
         }
         return(resultUrl);
     }
     //если урл определено, то обходим по дочкам и отдаем им урл, изменяя параметры родительских таблиц (учитываем референс)
     foreach (var item in Childs)
     {
         item.Parent = this;
         var url = urlBuilder.Clone();
         MoveReferenceToChilds(item, GetMenuItem(), url);
         item.InitMenu(url, true);
     }
     return(null);
 }