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