public int GetFieldIdForCard(CollectedCards card) { ChancelerryDBDataContext chancDB = new ChancelerryDBDataContext(); int valueToreturn = 0; Fields mainFieldInRegister = (from a in chancDB.Fields join b in chancDB.FieldsGroups on a.fk_fieldsGroup equals b.fieldsGroupID join c in chancDB.RegistersModels on b.fk_registerModel equals c.registerModelID join d in chancDB.Registers on c.registerModelID equals d.fk_registersModel where d.registerID == card.fk_register && (a.type == "autoIncrementReadonly" || a.type == "autoIncrement") select a).FirstOrDefault(); if (mainFieldInRegister != null) { CollectedFieldsValues collectedId = (from a in chancDB.CollectedFieldsValues where a.fk_field == mainFieldInRegister.fieldID && a.fk_collectedCard == card.collectedCardID select a).OrderByDescending(mc => mc.version).FirstOrDefault(); if (collectedId != null) { Int32.TryParse(collectedId.valueText, out valueToreturn); } } return(valueToreturn); }
protected void LogIn(object sender, EventArgs e) { if (IsValid) { ChancelerryDBDataContext datacontext = new ChancelerryDBDataContext(); var user = (from u in datacontext.Users where u.login == Email.Text && u.password == Password.Text && u.active == true select u).FirstOrDefault(); if (user != null) { Session["userID"] = user.userID; Response.Redirect("~/Default.aspx"); } else { FailureText.Text = "Неверный адрес электронной почты или пароль."; ErrorMessage.Visible = true; } } }
protected void Page_Load(object sender, EventArgs e) { var UserSer = Session["userID"]; if (UserSer == null) { FormsAuthentication.SignOut(); Session.Abandon(); Response.Redirect("~/Account/Login.aspx"); } ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext(); var user = (from u in dataContext.Users where u.userID == (int)UserSer select u).FirstOrDefault(); if (user != null) { Session["pageCntrl"] = 0; Directions(user); } else { FormsAuthentication.SignOut(); Session.Abandon(); Response.Redirect("~/Account/Login.aspx"); } }
protected void Page_Load(object sender, EventArgs e) { var userID = Session["userID"]; if (userID == null) { Response.Redirect("~/Default.aspx"); } ///////////////////////////////////////////////////////////////////// ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext(); // Забираем только прикрепленные реестры в RegUsrMap для данного пользователя и проверяем на активность в Registers. var registers = (from rum in dataContext.RegistersUsersMap join reg in dataContext.Registers on rum.fk_register equals reg.registerID where reg.active && rum.active && rum.fk_user == (int)userID select new { reg.registerID, reg.name }).ToList(); GridViewRegisters.DataSource = registers; BoundField boundField = new BoundField(); boundField.DataField = "registerID"; boundField.HeaderText = "ID"; boundField.Visible = false; GridViewRegisters.Columns.Add(boundField); ButtonField coluButtonField = new ButtonField(); coluButtonField.DataTextField = "name"; coluButtonField.HeaderText = "Реестры документов"; coluButtonField.ButtonType = ButtonType.Link; coluButtonField.CommandName = "Link"; GridViewRegisters.Columns.Add(coluButtonField); DataBind(); }
protected void Button1_Click(object sender, EventArgs e) { int rowIndex = 0; Button button = (Button)sender; using (ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext()) { // Запись в RegisterUserMap для данного пользователя и реестра var regUsrMap = (from a in dataContext.RegistersUsersMap where a.fk_register == (int)Session["registerID"] && a.fk_user == (int)Session["userID"] select a).FirstOrDefault(); if (ViewState["Gridview1"] != null) { DataTable dataTable = (DataTable)ViewState["Gridview1"]; // Проходим по всей таблице if (dataTable.Rows.Count > 0) { for (int i = 1; i <= dataTable.Rows.Count; i++) { // Находим компоненты Label fieldId = (Label)GridView1.Rows[rowIndex].FindControl("fieldId"); TextBox fieldName = (TextBox)GridView1.Rows[rowIndex].FindControl("fieldName"); TextBox fieldWeight = (TextBox)GridView1.Rows[rowIndex].FindControl("fieldWeight"); CheckBox fieldIsAdd = (CheckBox)GridView1.Rows[rowIndex].FindControl("fieldIsAdd"); // Запрос на существование записи в ТАБЛИЦЕ(БД) registersView с параметрами из таблицы RegistersView registersView = (from a in dataContext.RegistersView where a.fk_registersUsersMap == regUsrMap.registersUsersMapID && a.fk_field == Convert.ToInt32(fieldId.Text) select a).FirstOrDefault(); // Если такая запись в ТАБЛИЦЕ существует, то присваиваем значения active и weight из таблицы(на странице) if (registersView != null) { registersView.active = fieldIsAdd.Checked; registersView.weight = Convert.ToDouble(fieldWeight.Text); } else { // Если нет, то создаем новую запись в таблице RegistersView с параметрами из таблицы registersView = new RegistersView(); registersView.active = true; registersView.fk_registersUsersMap = regUsrMap.registersUsersMapID; registersView.fk_field = Convert.ToInt32(fieldId.Text); registersView.weight = Convert.ToDouble(fieldWeight.Text); dataContext.RegistersView.InsertOnSubmit(registersView); } dataContext.SubmitChanges(); rowIndex++; } } } } Response.Redirect("RegisterView.aspx"); }
protected void Button3_Click(object sender, EventArgs e) { ChancelerryDBDataContext chancDB = new ChancelerryDBDataContext(); List <CollectedCards> collectedCards = (from a in chancDB.CollectedCards select a).ToList(); foreach (CollectedCards currentCard in collectedCards) { currentCard.mainFieldId = GetFieldIdForCard(currentCard); } chancDB.SubmitChanges(); }
public int addCard(int fkRegister) { ChancelerryDBDataContext chancDB = new ChancelerryDBDataContext(); CollectedCards newCard = new CollectedCards(); newCard.active = true; newCard.fk_register = fkRegister; chancDB.CollectedCards.InsertOnSubmit(newCard); chancDB.SubmitChanges(); return(newCard.collectedCardID); }
public Table CreateTable(int dictionaryId) { Table tableToReturn = new Table(); ChancelerryDBDataContext chancDb = new ChancelerryDBDataContext(); List <DictionarysValues> allValues = (from a in chancDb.DictionarysValues where a.active == true && a.fk_dictionary == dictionaryId select a).Distinct().ToList(); foreach (DictionarysValues currentValue in allValues) { TableRow currentTableRow = new TableRow(); { TableCell currentTableCell1 = new TableCell(); { currentTableCell1.Width = 600; TextBox valueTextBox = new TextBox(); valueTextBox.ID = "dictValue_" + currentValue.dictionaryValueID.ToString(); valueTextBox.Attributes.Add("name", valueTextBox.ID); valueTextBox.Width = 600; valueTextBox.Style.Add("max-width", "100%"); valueTextBox.Text = currentValue.value; currentTableCell1.Controls.Add(valueTextBox); } TableCell currentTableCell2 = new TableCell(); { ImageButton deleteButton = new ImageButton(); deleteButton.ImageUrl = "~/kanz/icons/delButtonIcon.jpg"; deleteButton.Height = 20; deleteButton.Width = 20; deleteButton.CommandArgument = currentValue.dictionaryValueID.ToString(); deleteButton.Click += DelValueButtonClick; currentTableCell2.Controls.Add(deleteButton); } TableCell currentTableCell3 = new TableCell(); { ImageButton saveButton = new ImageButton(); saveButton.ImageUrl = "~/kanz/icons/saveButtonIcon.jpg"; saveButton.Height = 20; saveButton.Width = 20; saveButton.CommandArgument = currentValue.dictionaryValueID.ToString(); saveButton.Click += SaveValueButtonClick; currentTableCell3.Controls.Add(saveButton); } currentTableRow.Cells.Add(currentTableCell1); currentTableRow.Cells.Add(currentTableCell2); currentTableRow.Cells.Add(currentTableCell3); } tableToReturn.Rows.Add(currentTableRow); } return(tableToReturn); }
protected void AddValue_Click(object sender, ImageClickEventArgs e) { ChancelerryDBDataContext chancDb = new ChancelerryDBDataContext(); DictionarysValues newValue = new DictionarysValues(); newValue.active = true; newValue.fk_dictionary = Convert.ToInt32(DictionarysList.SelectedValue); newValue.value = " "; chancDb.DictionarysValues.InsertOnSubmit(newValue); chancDb.SubmitChanges(); divForTable.Controls.Clear(); divForTable.Controls.Add(CreateTable(Convert.ToInt32(DictionarysList.SelectedValue))); }
public void createFieldValue(int fkCard, int fkField, string value, int instance) { ChancelerryDBDataContext chancDB = new ChancelerryDBDataContext(); CollectedFieldsValues newValue = new CollectedFieldsValues(); newValue.active = true; newValue.fk_collectedCard = fkCard; newValue.fk_field = fkField; newValue.fk_user = 1; newValue.valueText = value; newValue.createDateTime = DateTime.Now; newValue.isDeleted = false; newValue.version = 1; newValue.instance = instance; chancDB.CollectedFieldsValues.InsertOnSubmit(newValue); chancDB.SubmitChanges(); }
public void DelValueButtonClick(object sender, EventArgs e) { ImageButton delButton = (ImageButton)sender; int id = Convert.ToInt32(delButton.CommandArgument); ChancelerryDBDataContext chancDb = new ChancelerryDBDataContext(); DictionarysValues currentValues = (from a in chancDb.DictionarysValues where a.dictionaryValueID == id select a).FirstOrDefault(); if (currentValues != null) { currentValues.active = false; chancDb.SubmitChanges(); } divForTable.Controls.Clear(); divForTable.Controls.Add(CreateTable(Convert.ToInt32(DictionarysList.SelectedValue))); }
public void SaveValueButtonClick(object sender, EventArgs e) { ImageButton saveButton = (ImageButton)sender; int id = Convert.ToInt32(saveButton.CommandArgument); ChancelerryDBDataContext chancDb = new ChancelerryDBDataContext(); DictionarysValues currentValues = (from a in chancDb.DictionarysValues where a.dictionaryValueID == id select a).FirstOrDefault(); if (currentValues != null) { TextBox myTextBox = (TextBox)divForTable.FindControl("dictValue_" + id); currentValues.value = myTextBox.Text; chancDb.SubmitChanges(); } divForTable.Controls.Clear(); divForTable.Controls.Add(CreateTable(Convert.ToInt32(DictionarysList.SelectedValue))); }
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { ChancelerryDBDataContext chancDb = new ChancelerryDBDataContext(); List <Dictionarys> dictionaryse = (from a in chancDb.Dictionarys where a.active == true select a).ToList(); DictionarysList.Items.Clear(); foreach (Dictionarys currentDictionary in dictionaryse) { ListItem tmpListItem = new ListItem(); tmpListItem.Text = currentDictionary.name; tmpListItem.Value = currentDictionary.dictionaryID.ToString(); DictionarysList.Items.Add(tmpListItem); } } divForTable.Controls.Clear(); divForTable.Controls.Add(CreateTable(Convert.ToInt32(DictionarysList.SelectedValue))); }
protected void GridViewRegisters_RowCommand(object sender, GridViewCommandEventArgs e) { ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext(); switch (e.CommandName) { case "Link": { var registers = (from rum in dataContext.RegistersUsersMap join reg in dataContext.Registers on rum.fk_register equals reg.registerID where reg.active && rum.active && rum.fk_user == (int)Session["userID"] select new { reg.registerID, reg.name }).ToList(); // CommandArgument - номер строки. Session["registerID"] = registers[Convert.ToInt32(e.CommandArgument)].registerID; Session["searchList"] = new List <TableActions.SearchValues>(); Session["vSearchList"] = null; Response.Redirect("RegisterView.aspx"); } break; } }
private void DeleteCard(object sender, EventArgs e) { ImageButton thisButton = (ImageButton)sender; int currentCardId = Convert.ToInt32(thisButton.Attributes["_cardID"]); HttpContext.Current.Session["cardID"] = currentCardId; ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext(); var card = (from c in dataContext.CollectedCards where c.fk_register == (int)HttpContext.Current.Session["registerID"] && c.collectedCardID == currentCardId select c).FirstOrDefault(); if (card != null) { card.active = false; } dataContext.SubmitChanges(); HttpContext.Current.Response.Redirect("~/kanz/RegisterView.aspx", true); }
protected void Page_Load(object sender, EventArgs e) { var userID = Session["userID"]; if (userID == null) { Response.Redirect("~/Default.aspx"); } /////////////////////////////////////////// if (!Page.IsPostBack) { Session["searchList"] = new List <TableActions.SearchValues>(); DataTable dataTable = new DataTable(); dataTable.Columns.Add(new DataColumn("fieldId", typeof(int))); dataTable.Columns.Add(new DataColumn("fieldName", typeof(string))); dataTable.Columns.Add(new DataColumn("fieldWeight", typeof(double))); dataTable.Columns.Add(new DataColumn("fieldIsAdd", typeof(bool))); using (ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext()) { //кусок Ваге // создаем для пользователя все связи к выбранному регистру если их нет List <Fields> allFieldsInTable = (from a in dataContext.Fields join b in dataContext.FieldsGroups on a.fk_fieldsGroup equals b.fieldsGroupID join c in dataContext.RegistersModels on b.fk_registerModel equals c.registerModelID join d in dataContext.Registers on c.registerModelID equals d.fk_registersModel where a.active == true && b.active == true && c.active == true && d.active == true && d.registerID == (int)Session["registerID"] select a).Distinct().ToList(); List <Fields> allFieldsWithUser = (from a in dataContext.Fields join b in dataContext.RegistersView on a.fieldID equals b.fk_field join c in dataContext.RegistersUsersMap on b.fk_registersUsersMap equals c.registersUsersMapID where a.active == true && c.active == true // && b.active == tr && c.fk_register == (int)Session["registerID"] && c.fk_user == (int)Session["userID"] select a).ToList(); RegistersUsersMap registerUserMap = (from a in dataContext.RegistersUsersMap where a.active && a.fk_user == (int)Session["userID"] && a.fk_register == (int)Session["registerID"] select a).FirstOrDefault(); foreach (Fields currentField in allFieldsInTable) { if (allFieldsWithUser.Contains(currentField)) { continue; } else { RegistersView registersView = new RegistersView(); registersView.active = true; registersView.fk_registersUsersMap = registerUserMap.registersUsersMapID; registersView.fk_field = currentField.fieldID; registersView.weight = 0; dataContext.RegistersView.InsertOnSubmit(registersView); dataContext.SubmitChanges(); } } /* * // Кусок Ваге окончен :) * // Все возможные поля для таблицы в данном реестре * var all = (from a in dataContext.Fields * join b in dataContext.RegistersView on a.fieldID equals b.fk_field * join c in dataContext.RegistersUsersMap on b.fk_registersUsersMap equals c.registersUsersMapID * where c.fk_register == (int)Session["registerID"] * select new {a.fieldID, a.name, b.weight}).Distinct(); * * // Уже прикрученные поля к этому пользователю * var userView = (from a in dataContext.Fields * join b in dataContext.RegistersView on a.fieldID equals b.fk_field * join c in dataContext.RegistersUsersMap on b.fk_registersUsersMap equals c.registersUsersMapID * where c.fk_register == (int)Session["registerID"] && c.fk_user == (int)Session["userID"] && b.active * select a.fieldID).Distinct().ToList(); * * var allCross = new List<ViewFieldData>(); * * // Проходим по всем полям * foreach (var qwe in all) * { * // Если это поле прикручено к таблице этого реестра и этому пользователю в ТАБЛИЦЕ RegisterView, то отмечаем его с галочкой Checked true * allCross.Add(userView.Contains(qwe.fieldID) * ? new ViewFieldData() * { * id = qwe.fieldID, * name = qwe.name, * weight = qwe.weight, * isAdd = true * } * // если нет то с галочкой UnChecked false * : new ViewFieldData() * { * id = qwe.fieldID, * name = qwe.name, * weight = qwe.weight, * isAdd = false * }); * } * * // Проходим по allCross, добавляем дааные из него в таблицу * * foreach (var item in allCross) * { * DataRow dataRow = dataTable.NewRow(); * dataRow["fieldId"] = item.id; * dataRow["fieldName"] = item.name; * dataRow["fieldWeight"] = item.weight; * dataRow["fieldIsAdd"] = item.isAdd; * dataTable.Rows.Add(dataRow); * } */ foreach (var item in allFieldsWithUser) { DataRow dataRow = dataTable.NewRow(); dataRow["fieldId"] = item.fieldID; dataRow["fieldName"] = item.name; dataRow["fieldWeight"] = (from a in dataContext.RegistersView where a.fk_registersUsersMap == registerUserMap.registersUsersMapID && a.fk_field == item.fieldID //&& a.active == true select a.weight).FirstOrDefault(); dataRow["fieldIsAdd"] = (from a in dataContext.RegistersView where a.fk_registersUsersMap == registerUserMap.registersUsersMapID && a.fk_field == item.fieldID //&& a.active == true select a.active).FirstOrDefault(); dataTable.Rows.Add(dataRow); } GridView1.DataSource = dataTable; ViewState["Gridview1"] = dataTable; GridView1.DataBind(); } } }
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; } } }
public void RefreshTable(ChancelerryDBDataContext dataContext, object userID, Registers register, object regId, Table dataTable, List <SearchValues> searchList) { dataTable.Rows.Clear(); bool addToTable = true; // Достаем поля для данного реестра и пользователя на основе 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 on regView.fk_field equals _fields.fieldID where regUsrMap.fk_user == Convert.ToInt32(userID) && regUsrMap.fk_register == register.registerID 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 cards = (from card in dataContext.CollectedCards join r in dataContext.Registers on card.fk_register equals r.registerID where r.registerID == Convert.ToInt32(regId) select card.collectedCardID).ToList(); // по всем карточкам foreach (var card in cards) { List <string> cardRow = new List <string>(); // GetValue(fieldsId, dataContext, card, cardRow); // функция добавления значения Row для каждой карточки и поля foreach (var field in fieldsId) // проходим по каждому полю в карточке card { addToTable = true; StringBuilder fieldInstancesValue = new StringBuilder(); List <DataOne> query = new List <DataOne>(); // Если в поисковом листе что-то есть if (searchList.Any()) { // Получаем объект из поискового листа для данного поля с Id = fieldId var searchObj = (from a in searchList where a.fieldId == field select a).FirstOrDefault(); // Если данное поле с Id = fieldId есть в поисковом листе if (searchObj != null) { // Получаем объект данного поля с поисковым фильтром // сотношение поля и карточки в collected (получаем поле с его инстансами и версией) query = (from a in dataContext.CollectedFieldsValues where a.fk_field == field && a.fk_collectedCard == card && a.valueText.Contains(searchObj.value) select new DataOne() { textValue = a.valueText, instance = a.instance, version = a.version, deleted = a.isDeleted }).ToList(); // Если объект поля с поисковым фильтром НЕ существует if (!query.Any()) { // Определяем флаг добавления этого Row как false, выходим с итерации. addToTable = false; break; } } // Если поля с Id = fieldId НЕТ в поисковом листе, else { // Получаем объект данного поля // сотношение поля и карточки в collected (получаем поле с его инстансами и версией) query = (from a in dataContext.CollectedFieldsValues 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(); } } // Если поисковой лист отсутствует else { // сотношение поля и карточки в collected (получаем поле с его инстансами и версией) query = (from a in dataContext.CollectedFieldsValues 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 instanceFilter = (from f in query where !f.deleted select new DataOne() { instance = f.instance, version = f.version, textValue = f.textValue, deleted = f.deleted }).OrderByDescending(ver => ver.version).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; // переменная для отображения порядкового номера инстанса 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()); } if (addToTable) { dataTable.Rows.Add(AddRowFromList(cardRow, card)); // Добавляем в таблицу Row } } }
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 } }