private void btnDeleteSelectedCategory_Click(object sender, EventArgs e) { if (selectedCategory==null) { if (tvCategories.SelectedNode.Name == "0" || tvCategories.SelectedNode.Name == "1") { EPCategories.SetError(labSelectedCategoryName, "Kategorii wyróżnionych niebieskim kolorem nie można usunąć"); } else { EPCategories.SetError(labSelectedCategoryName, "Wybierz kategorię do usunięcia"); } return; } string selectedCategoryName = labSelectedCategoryName.Text; if ((new BibliotekaDataContext()).Kategorias.Count(x => x.nazwa == selectedCategoryName) == 0) { MessageBox.Show("Prawdopodobnie formularz wymaga odświeżenia. Nie ma kategorii, którą próbujesz usunąć.", "Błąd usuwania kategorii", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } bool deleteSubs = cbSubCatsDecision.SelectedIndex == 0 ? false : true; bool makeSubsTLC = false; if (selectedCategory.kategoriaNadrzednaID == null && deleteSubs == false) { } { if ((new BibliotekaDataContext()).Kategorias.Count(x => x.kategoriaNadrzednaID == selectedCategory.id) == 0) { makeSubsTLC = true; } else if (MessageBox.Show( "Wybrana kategoria nie posiada kategorii nadrzędnej. Wybrałeś opcję przenoszącą podkategorię do kategorii nadrzędnej.\r\nKontynuacja będzie oznaczała zamianę podkategorii w kategorie najwyższego poziomu.\r\n\r\nCzy chcesz przerwać operację?", "Sytuacja wyjątkowa podczas usuwania kategorii", MessageBoxButtons.YesNo, MessageBoxIcon.Question ) == DialogResult.No) { makeSubsTLC = true; // Czy uczynic podkategorie korzeniami } else { EPCategories.SetError(cbSubCatsDecision, "Wybrana kategoria nie posiada kategorii nadrzędnej"); return; } } /* +++ Operacje na bazie danych */ using (BibliotekaDataContext db = new BibliotekaDataContext()) { Kategoria newSelectedCategory = selectedCategory.Kategoria1; // pobieranie identyfikatorow podkategorii List<int> subsIDs = db.Kategorias.Where(x => x.kategoriaNadrzednaID == selectedCategory.id).Select(x => x.id).ToList(); if (deleteSubs) { // +++ uzupelniam poddrzewo kategorii int treeElementsCount = -1; while (treeElementsCount != subsIDs.Count) { treeElementsCount = subsIDs.Count; subsIDs = db.Kategorias.Where(x => subsIDs.Contains(x.id) || subsIDs.Contains((int)x.kategoriaNadrzednaID)).Select(x => x.id).Distinct().ToList(); } subsIDs.Add(selectedCategory.id); // --- poddrzewo uzupelnione // kasowanie powiazan kategorii z ksiazkami db.KategoriaKsiazkis.DeleteAllOnSubmit(db.KategoriaKsiazkis.Where(x => subsIDs.Contains(x.kategoriaID)).ToArray()); // kasowanie calego drzewa podkategorii db.Kategorias.DeleteAllOnSubmit(db.Kategorias.Where(x => subsIDs.Contains(x.id)).ToArray()); } else if (makeSubsTLC) { db.KategoriaKsiazkis.DeleteAllOnSubmit(db.KategoriaKsiazkis.Where(x => x.kategoriaID == selectedCategory.id).ToArray()); List<Kategoria> scl = db.Kategorias.Where(x => x.kategoriaNadrzednaID == selectedCategory.id).ToList(); foreach (Kategoria sc in scl) { sc.kategoriaNadrzednaID = null; } db.Kategorias.DeleteOnSubmit(db.Kategorias.Where(x => x.id == selectedCategory.id).Single()); } else { db.KategoriaKsiazkis.DeleteAllOnSubmit(db.KategoriaKsiazkis.Where(x => x.kategoriaID == selectedCategory.id).ToArray()); List<Kategoria> scl = db.Kategorias.Where(x => x.kategoriaNadrzednaID == selectedCategory.id).ToList(); foreach (Kategoria sc in scl) { sc.kategoriaNadrzednaID = selectedCategory.kategoriaNadrzednaID; } db.Kategorias.DeleteOnSubmit(db.Kategorias.Where(x => x.id == selectedCategory.id).Single()); } try { db.SubmitChanges(); } catch (System.Data.SqlClient.SqlException sqlExp) { sqlExceptionMessage = sqlExp.Message; MessageBox.Show("Wystąpił błąd związany z bazą danych.", "Błąd usuwania kategorii", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } selectedCategory = newSelectedCategory; } /* --- Operacje na bazie danych */ /* +++ Aktualizacja TreeView */ SuspendLayout(); TreeNode newSelectedNode = tvCategories.SelectedNode.Parent; if (deleteSubs == true) { tvCategories.SelectedNode.Remove(); } else { foreach (TreeNode tn in tvCategories.SelectedNode.Nodes) { tvCategories.SelectedNode.Parent.Nodes.Add(tn.Name, tn.Text); } tvCategories.SelectedNode.Nodes.Clear(); tvCategories.SelectedNode.Remove(); } tvCategories.SelectedNode = newSelectedNode; ResumeLayout(); /* --- Aktualizacja TreeView */ labSelectedCategoryName.Text = selectedCategory == null ? (selectedCategoryKey == null ? "" : selectedCategoryKey) : selectedCategory.nazwa; }
private void tvCategories_AfterSelect(object sender, TreeViewEventArgs e) { if (e.Node.Name == "0") { selectedCategory = null; labSelectedCategoryName.Text = "Książki bez kategorii"; labSelectedCategoryName.ForeColor = Color.FromArgb(0, 0, 255); } else if (e.Node.Name == "1") { selectedCategory = null; labSelectedCategoryName.Text = "Wszystkie kategorie"; labSelectedCategoryName.ForeColor = Color.FromArgb(0, 0, 255); } else { selectedCategory = (new BibliotekaDataContext()).Kategorias.Where(x => x.nazwa == e.Node.Text).Single(); labSelectedCategoryName.Text = selectedCategory.nazwa; labSelectedCategoryName.ForeColor = Color.FromArgb(0, 0, 0); } EPCategories.SetError(labSelectedCategoryName, null); EPCategories.SetError(cbSubCatsDecision, null); }
private void detach_Kategorias(Kategoria entity) { this.SendPropertyChanging(); entity.Kategoria1 = null; }
private void attach_Kategorias(Kategoria entity) { this.SendPropertyChanging(); entity.Kategoria1 = this; }
partial void DeleteKategoria(Kategoria instance);
partial void UpdateKategoria(Kategoria instance);
partial void InsertKategoria(Kategoria instance);