protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (Request.QueryString["page"] == null)
                {
                    string lastPage = (string)Session["currentPage"];
                    if (lastPage != null)
                    {
                        lastPage = "RegisterView.aspx" + lastPage;
                        Response.Redirect(lastPage);
                    }
                }
            }

            #region инициализация сессии пользователя и выбранного регистра
            timeStampsLabel.Text = " 0_" + DateTime.Now.TimeOfDay;
            int userId = 0;
            int.TryParse(Session["userID"].ToString(), out userId);

            if (userId == 0)
            {
                Response.Redirect("~/Default.aspx");
            }
            else
            {
                ViewState["userID"] = userId;
            }
            /////////////////////////////////////////////////////////////////////
            int regId;
            Int32.TryParse(Session["registerID"].ToString(), out regId);
            //TableActions ta = new TableActions();
            var register =
                (from r in dataContext.Registers
                 where r.RegisterID == regId
                 select r).FirstOrDefault();
            #endregion
            if (register != null)
            {
                #region инициализация сессий поисков и get и списков
                if (!Page.IsPostBack)
                {
                    ChooseSortFieldIdDropDownList.Items.AddRange(GetListOfColumns(register.RegisterID, userId));
                }
                RegisterNameLabel.Text = register.Name;
                if (Request.QueryString["page"] != null)
                {
                    Int32.TryParse(Request.QueryString["page"], out page);
                }
                if (Request.QueryString["size"] != null)
                {
                    Int32.TryParse(Request.QueryString["size"], out size);
                }
                if (Request.QueryString["sortFieldId"] != null)
                {
                    Int32.TryParse(Request.QueryString["sortFieldId"], out sortFieldId);
                }

                Session["currentPage"] = "?page=" + page + "&size=" + size + " & sortFieldId = " + sortFieldId;

                Dictionary <int, string> vSearchList = (Dictionary <int, string>)Session["vSearchList"];
                string searchAll         = (string)Session["vSearchAll"];
                string searchCardId      = (string)Session["vSearchById"];
                string searchAllExtended = (string)Session["vSearchAllWithParams"];
                #endregion
                CardCommonFunctions cardCommonFunctions = new CardCommonFunctions();
                int    totalCnt = 0;
                string sum      = cardCommonFunctions.FastSearch(sortFieldId, searchAllExtended, searchCardId, vSearchList, searchAll, register.RegisterID, Convert.ToInt32(userId), dataTable, page * size, (page + 1) * size, out totalCnt);
                #region инициализация кнопок и инфо

                timeStampsLabel.Text += cardCommonFunctions.timeStamps;
                int    pagesCnt    = totalCnt / size;
                string pageNumbers = "";

                if (totalCnt % size > 0)
                {
                    pagesCnt++;
                }

                int startNumber = page - 5;
                startNumber = startNumber < 0 ? 0 : startNumber;

                for (int i = startNumber; i < 10 + startNumber; i++)
                {
                    if (i > pagesCnt - 1)
                    {
                        continue;
                    }
                    if (i == page)
                    {
                        pageNumbers += "<font color='red'> " + (i + 1).ToString() + " </font>";
                    }
                    else

                    {
                        pageNumbers += "<a href=\"?page=" + i + "&size=" + size + "&sortFieldId=" + sortFieldId + "\"> " + (i + 1).ToString() + " </a>";
                    }
                }

                GoToFirstTop.OnClientClick    = "window.open(location.origin+location.pathname+'?page=0&size=" + size + "&sortFieldId=" + sortFieldId + "','_self'); return false;";
                GoToFirstBottom.OnClientClick = "window.open(location.origin+location.pathname+'?page=0&size=" + size + "&sortFieldId=" + sortFieldId + "','_self'); return false;";
                if (page == 0)
                {
                    GoToPreviousTop.Enabled    = false;
                    GoToPreviousBottom.Enabled = false;
                }
                else
                {
                    GoToPreviousTop.OnClientClick    = "window.open(location.origin+location.pathname+'?page=" + (page - 1) + "&size=" + size + "&sortFieldId=" + sortFieldId + "','_self'); return false;";
                    GoToPreviousBottom.OnClientClick = "window.open(location.origin+location.pathname+'?page=" + (page - 1) + "&size=" + size + "&sortFieldId=" + sortFieldId + "','_self'); return false;";
                }
                if (page == pagesCnt - 1)
                {
                    GoToNextTop.Enabled    = false;
                    GoToNextBottom.Enabled = false;
                }
                else
                {
                    GoToNextTop.OnClientClick    = "window.open(location.origin+location.pathname+'?page=" + (page + 1) + "&size=" + size + "&sortFieldId=" + sortFieldId + "','_self'); return false;";
                    GoToNextBottom.OnClientClick = "window.open(location.origin+location.pathname+'?page=" + (page + 1) + "&size=" + size + "&sortFieldId=" + sortFieldId + "','_self'); return false;";
                }
                GoToLastTop.OnClientClick    = "window.open(location.origin+location.pathname+'?page=" + (pagesCnt - 1) + "&size=" + size + "&sortFieldId=" + sortFieldId + "','_self'); return false;";
                GoToLastBottom.OnClientClick = "window.open(location.origin+location.pathname+'?page=" + (pagesCnt - 1) + "&size=" + size + "&sortFieldId=" + sortFieldId + "','_self'); return false;";

                string page_info = sum;

                PagesListTop.Text    = pageNumbers;
                PagesListBottom.Text = pageNumbers;

                PageInfoTop.Text    = page_info;
                PageInfoBottom.Text = page_info;
                #endregion
            }
            timeStampsLabel.Text += " 7_" + DateTime.Now.TimeOfDay;
        }
示例#2
0
        public void RefreshTable(ChancelerryDBDataContext dataContext, object userID, Registers register, object regId, Table dataTable, Dictionary <int, string> searchList)
        {
            dataTable.Rows.Clear();
            // Достаем поля для данного реестра и пользователя на основе RegisterView и прав пользователя RegistersUsersMap c сортировкой по весу
            var fieldsAll = (from regUsrMap in dataContext.RegistersUsersMap
                             join regView in dataContext.RegistersView on regUsrMap.registersUsersMapID equals regView.fk_registersUsersMap
                             join _fields in dataContext.Fields.OrderByDescending(n => n.fieldID == 1) on regView.fk_field equals _fields.fieldID
                             where regUsrMap.fk_user == Convert.ToInt32(userID) && regUsrMap.fk_register == register.registerID && regView.active
                             select new { _fields.name, _fields.fieldID, regView.weight }).OrderBy(w => w.weight).ToList();
            var fieldsName = (from f in fieldsAll select f.name).ToList();
            var fieldsId   = (from f in fieldsAll select f.fieldID).ToList();


            // Поиск
            dataTable.Rows.Add(AddSearchHeaderRoFromList(fieldsId));

            // Заголовки
            dataTable.Rows.Add(AddHeaderRoFromList(fieldsName));

            // Карточки этого реестра + номера документов по которым фильтровать
            var cardsAllFull = (from card in dataContext.CollectedCards
                                join collected in dataContext.CollectedFieldsValues on card.collectedCardID equals collected.fk_collectedCard
                                join field in dataContext.Fields on collected.fk_field equals field.fieldID
                                where card.fk_register == (int)HttpContext.Current.Session["registerID"] &&
                                card.active &&
                                field.type == "autoIncrement"
                                select new DataOne()
            {
                id = card.collectedCardID, textValue = collected.valueText
            }).ToList();                                                                                                // LOG !!! {try catch в каком поле ошибка}

            // добавляем в version конвертированное значение номера документа из string в int для дальнейшего фильтра
            foreach (var itm in cardsAllFull)
            {
                int tmp = 0;                            // V
                Int32.TryParse(itm.textValue, out tmp); //V
                itm.version = tmp;
            }

            List <int> cardsToShow = new List <int>(); // сюда будем складывать карточки которые нужно показать

            /*
             * if (searchList != null) //если фильтры есть
             * {
             *  bool isFirst = true;
             *  foreach (int currentKey in searchList.Keys) // проходимся по каждому фильтру
             *  {
             *      int fieldId = currentKey;
             *      string fieldValue = "";
             *      searchList.TryGetValue(fieldId, out fieldValue);  //достаем айдишник нашего филда
             *
             *      List<int> cardsWithValue = (from a in dataContext.CollectedFieldsValues
             *                                  where a.active == true && a.fk_field == fieldId && a.valueText.Contains(fieldValue)
             *                                  join b in dataContext.CollectedCards on a.fk_collectedCard equals b.collectedCardID
             *                                  where b.active == true
             *                                  select a.fk_collectedCard).Distinct().ToList(); // находим все карточки которые соответсвтуют
             *      List<int> tmpList;
             *      if (isFirst)
             *      {
             *          tmpList = cardsWithValue;
             *      }
             *      else
             *      {
             *          tmpList = (from a in cardsWithValue join b in cardsToShow on a equals b select a).Distinct().ToList();
             *      }
             *      isFirst = false;
             *      cardsToShow = tmpList;
             *  }
             * }
             * else // если фильтров нет, показываем все карточки
             * {
             *  // фильтруем по номерам документов и достаем только ID'шники карточек
             *  cardsToShow = (from a in cardsAllFull select a).OrderByDescending(n => n.version).ToList().Select(card => card.id).Distinct().ToList();
             * }
             */


            //ВАГЕКОД НАЧАЛО
            CardCommonFunctions ccf = new CardCommonFunctions();

            cardsToShow = ccf.GetCardsToShow(searchList, (int)HttpContext.Current.Session["registerID"]);
            //ВАГЕКОД КОНЕЦ

            // SIVAS OPTIMIZATION START
            List <CollectedFieldsValues> collectedFiltered = new List <CollectedFieldsValues>();

            foreach (var c in cardsToShow.Skip((int)HttpContext.Current.Session["pageCntrl"] * 10).Take(10))
            {
                collectedFiltered.AddRange(((from a in dataContext.CollectedFieldsValues where a.fk_collectedCard == c select a).ToList()));
            }
            // SIVAS OPTIMIZATION END

            HttpContext.Current.Session["pageCount"]  = (int)Math.Floor((double)cardsToShow.Count / 10) + 1; // количество страниц таблицы
            HttpContext.Current.Session["cardsCount"] = cardsToShow.Count;


            // Отрисовка //

            // по всем карточкам
            foreach (var card in cardsToShow.Skip((int)HttpContext.Current.Session["pageCntrl"] * 10).Take(10).ToList())
            {
                List <string> cardRow = new List <string>();

                foreach (var field in fieldsId)                              // проходим по каждому полю в карточке card
                {
                    StringBuilder fieldInstancesValue = new StringBuilder(); // сюда записываем все инстансы

                    // сотношение поля и  карточки в collected (получаем поле с его инстансами и версией)
                    var query = (from a in collectedFiltered
                                 where a.fk_field == field && a.fk_collectedCard == card
                                 select new DataOne()
                    {
                        textValue = a.valueText,
                        instance = a.instance,
                        version = a.version,
                        deleted = a.isDeleted
                    }).ToList();

                    // Список всех удаленных инстансов
                    var delInst = (from ins in query where ins.deleted select ins.instance).ToList();

                    // Получаем список всех инстансов для данного поля исключая удаленные
                    var instances = (from f in query
                                     where !f.deleted
                                     select f.instance).Distinct().ToList().Except(delInst.Distinct()).ToList();

                    var k = 1; // переменная для отображения порядкового номера инстанса

                    // Если инстанс 1 то отображаем без 1) и br
                    if (instances.Count <= 1)
                    {
                        fieldInstancesValue.Append(
                            (from vv in query
                             where vv.instance == instances[0] && !vv.deleted
                             select vv).OrderByDescending(v => v.version)
                            .FirstOrDefault()?.textValue);
                    }
                    else
                    {
                        foreach (var instance in instances)
                        {
                            // Забираем максимальное значение(версия) textValue каждого инстанса
                            fieldInstancesValue.Append(
                                k.ToString() + ") " +
                                (from vv in query
                                 where vv.instance == instance && !vv.deleted
                                 select vv).OrderByDescending(v => v.version)
                                .FirstOrDefault()?.textValue + "<br>");           //если не null за писываем в поле
                            k++;
                        }
                    }


                    // Добавляем значения в Row каждого поля
                    cardRow.Add(fieldInstancesValue.ToString());
                }

                dataTable.Rows.Add(AddRowFromList(cardRow, card));     // Добавляем в таблицу Row
            }
        }
示例#3
0
        protected void Page_Load(object sender, EventArgs e)
        {
            var userID = Session["userID"];

            if (userID == null)
            {
                Response.Redirect("~/Default.aspx");
            }
            else
            {
                ViewState["userID"] = userID;
            }

            /////////////////////////////////////////////////////////////////////

            var regId = Session["registerID"];
            ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext();
            TableActions             ta          = new TableActions();

            var register =
                (from r in dataContext.Registers
                 where r.registerID == Convert.ToInt32(regId)
                 select r).FirstOrDefault();


            if (register != null)
            {
                RegisterNameLabel.Text = register.name;


                if (vVersion)
                {
                    int size = 100;
                    if (Request.QueryString["page"] != null)
                    {
                        Int32.TryParse(Request.QueryString["page"], out page);
                    }

                    Dictionary <int, string> vSearchList         = (Dictionary <int, string>)Session["vSearchList"];
                    CardCommonFunctions      cardCommonFunctions = new CardCommonFunctions();

                    string sum = cardCommonFunctions.FastSearch(vSearchList, register.registerID, Convert.ToInt32(userID), dataTable, page * size, (page + 1) * size);
                    Button5.Visible        = true;
                    Button6.Visible        = true;
                    Button7.Visible        = false;
                    Button8.Visible        = false;
                    BottomButton9.Visible  = false;
                    BottomButton10.Visible = true;
                    BottomButton11.Visible = true;
                    BottomButton12.Visible = false;
                    string page_info = sum;
                    PageNumberLabel.Text       = page_info;
                    BottomPageNumberLabel.Text = page_info;
                }
                else
                {
                    ta.RefreshTable(dataContext, Convert.ToInt32(ViewState["userID"]), register, regId, dataTable, (Dictionary <int, string>)Session["vSearchList"]);
                    TableActions.DTable = dataTable;


                    string page_info = "Cтраница: " + ((int)Session["pageCntrl"] + 1).ToString() + "/" + (int)Session["pageCount"] + ". Всего: " + (int)Session["cardsCount"];
                    PageNumberLabel.Text       = page_info;
                    BottomPageNumberLabel.Text = page_info;
                }
            }
        }