protected void GridApdate() { int userToChangeId = Convert.ToInt32(Session["userLink"]); DataTable dataTable = new DataTable(); dataTable.Columns.Add(new DataColumn("ID", typeof(int))); dataTable.Columns.Add(new DataColumn("Access", typeof(bool))); dataTable.Columns.Add(new DataColumn("Name", typeof(string))); dataTable.Columns.Add(new DataColumn("Edit", typeof(bool))); List <Registers> registers = (from a in chancDb.Registers where a.Active == true select a).ToList(); foreach (var link in registers) { DataRow dataRow = dataTable.NewRow(); dataRow["ID"] = link.RegisterID; dataRow["Name"] = link.Name; RegistersUsersMap check = (from b in chancDb.RegistersUsersMap where b.Active == true && b.FkUser == userToChangeId && b.FkRegister == link.RegisterID select b).FirstOrDefault(); if (check != null) { dataRow["Access"] = true; if (check.CanEdit == true) { dataRow["Edit"] = true; } else { dataRow["Edit"] = false; } } else { dataRow["Access"] = false; dataRow["Edit"] = false; } dataTable.Rows.Add(dataRow); } GridView1.DataSource = dataTable; GridView1.DataBind(); }
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 (ChancelerryDb dataContext = new ChancelerryDb(new NpgsqlConnection(WebConfigurationManager.AppSettings["ConnectionStringToPostgre"]))) { int regId; int userId; int.TryParse(Session["registerID"].ToString(), out regId); int.TryParse(Session["userID"].ToString(), out userId); //кусок Ваге // создаем для пользователя все связи к выбранному регистру если их нет List <Fields> allFieldsInTable = (from a in dataContext.Fields join b in dataContext.FieldsGroups on a.FkFieldsGroup equals b.FieldsGroupID join c in dataContext.RegistersModels on b.FkRegisterModel equals c.RegisterModelID join d in dataContext.Registers on c.RegisterModelID equals d.FkRegistersModel where a.Active == true && b.Active == true && c.Active == true && d.Active == true //&& d.RegisterID == (int) Session["registerID"] PORT && d.RegisterID == regId select a).Distinct().ToList(); List <Fields> allFieldsWithUser = (from a in dataContext.Fields join b in dataContext.RegistersView on a.FieldID equals b.FkField join c in dataContext.RegistersUsersMap on b.FkRegistersUsersMap equals c.RegistersUsersMapID where a.Active == true && c.Active == true // && b.active == tr // && c.FkRegister == (int)Session["registerID"] PORT // && c.FkUser == (int)Session["userID"] PORT && c.FkRegister == regId && c.FkUser == userId select a).ToList(); RegistersUsersMap registerUserMap = (from a in dataContext.RegistersUsersMap where a.Active // && a.FkUser == (int)Session["userID"] PORT // && a.FkRegister == (int)Session["registerID"] PORT && a.FkUser == userId && a.FkRegister == regId select a).FirstOrDefault(); foreach (Fields currentField in allFieldsInTable) { if (allFieldsWithUser.Contains(currentField)) { continue; } else { RegistersView registersView = new RegistersView(); registersView.Active = true; registersView.FkRegistersUsersMap = registerUserMap.RegistersUsersMapID; registersView.FkField = 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.FkRegistersUsersMap == registerUserMap.RegistersUsersMapID && a.FkField == item.FieldID //&& a.active == true select a.Weight).FirstOrDefault(); dataRow["fieldIsAdd"] = (from a in dataContext.RegistersView where a.FkRegistersUsersMap == registerUserMap.RegistersUsersMapID && a.FkField == item.FieldID //&& a.active == true select a.Active).FirstOrDefault(); dataTable.Rows.Add(dataRow); } GridView1.DataSource = dataTable; ViewState["Gridview1"] = dataTable; GridView1.DataBind(); } } }
protected void Button1_Click(object sender, EventArgs e) { int userToChangeId = Convert.ToInt32(Session["userLink"]); for (int i = 0; i < GridView1.Rows.Count; i++) { CheckBox confirmed = (CheckBox)GridView1.Rows[i].FindControl("Access"); CheckBox edit = (CheckBox)GridView1.Rows[i].FindControl("Edit"); Label label = (Label)GridView1.Rows[i].FindControl("ID"); int regId = Convert.ToInt32(label.Text); if (confirmed.Checked == true) { RegistersUsersMap checkedgroup = (from a in chancDb.RegistersUsersMap where a.FkUser == userToChangeId && a.FkRegister == regId select a).FirstOrDefault(); if (checkedgroup != null) { checkedgroup.Active = true; chancDb.SubmitChanges(); if (edit.Checked == true) { checkedgroup.CanEdit = true; chancDb.SubmitChanges(); } else { checkedgroup.CanEdit = false; chancDb.SubmitChanges(); } } else { RegistersUsersMap userlink = new RegistersUsersMap(); userlink.FkUser = userToChangeId; userlink.FkRegister = Convert.ToInt32(label.Text); userlink.Active = true; if (edit.Checked == true) { userlink.CanEdit = true; } else { userlink.CanEdit = false; } chancDb.RegistersUsersMap.InsertOnSubmit(userlink); chancDb.SubmitChanges(); } } else { RegistersUsersMap checkedgroup = (from a in chancDb.RegistersUsersMap where a.Active == true && a.FkUser == userToChangeId && a.FkRegister == regId select a).FirstOrDefault(); if (checkedgroup != null) { checkedgroup.Active = false; chancDb.SubmitChanges(); } } } GridApdate(); }