private void btnDeleteSelectedAuthor_Click(object sender, EventArgs e) { if (dgvAuthors.SelectedAuthor==null) { MessageBox.Show("Nie wybrałeś autora do skasowania", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (MessageBox.Show("Czy na pewno chcesz usunąć tego autora?", "Zatwierdź", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return; using (BibliotekaDataContext db = new BibliotekaDataContext()) { db.KsiazkaAutoras.DeleteAllOnSubmit(db.KsiazkaAutoras.Where(x => x.autorID == dgvAuthors.SelectedAuthor.id).ToArray()); db.Autors.DeleteOnSubmit(db.Autors.Where(x=>x.id==selectedAuthor.id).Single()); try { db.SubmitChanges(); } catch (Exception) { MessageBox.Show("Autor nie został usunięty.\r\nWystąpił błąd bazy danych.", "Błąd usuwania autora", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } dgvAuthors.RemoveSelectedAuthor(); MessageBox.Show("Autor " + selectedAuthor.imie.ToString() + " " + selectedAuthor.nazwisko.ToString() + " został usunięty.", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information); }
/// przycisk dodajacy/zapisujacy edycje private void ButtonAdd_Click(object sender, EventArgs e) { string firstName = tbFirstname.Text.Trim(); if (firstName.Length < 2) { EPNewAuthor.SetError(tbFirstname, "Imię musi zawierać nie mniej niż 2 znaki"); return; } if (firstName.Length > 20) { EPNewAuthor.SetError(tbFirstname, "Imie nie może zawierać więcej niż 50 znaków"); return; } if (Regex.IsMatch(firstName, @"^[\p{Lu}]{1}[\p{L}\'\-\s]+[\p{L}]+\.*?$", RegexOptions.Singleline) == false || Regex.IsMatch(firstName, @"(('\-)|('')|(\-\-)|(\-'))") == true) { EPNewAuthor.SetError(tbFirstname, "Podany wyraz nie spełnił kryteriów poprawności imienia"); return; } string surName = tbSurname.Text.Trim(); if (surName.Length < 2) { EPNewAuthor.SetError(tbSurname, "Imię musi zawierać nie mniej niż 2 znaki"); return; } if (surName.Length > 50) { EPNewAuthor.SetError(tbSurname, "Imie nie może zawierać więcej niż 50 znaków"); return; } if (Regex.IsMatch(surName, @"^[\p{Lu}]{1}[\p{L}\'\-\s]+[\p{L}]+$") == false || Regex.IsMatch(surName, @"(('\-)|('')|(\-\-)|(\-'))") == true) { EPNewAuthor.SetError(tbSurname, "Podany wyraz nie spełnił kryteriów poprawności imienia"); return; } short birthYear = 0; if (tbBirthYear.Text.Trim() != "") { if (Regex.IsMatch(tbBirthYear.Text.Trim(), @"^[1-2]{1}[0-9]{3}$", RegexOptions.Singleline) == false) { EPNewAuthor.SetError(tbBirthYear, "Niepoprawny format roku"); return; } try { birthYear = short.Parse(tbBirthYear.Text.Trim()); } catch (Exception) { EPNewAuthor.SetError(tbBirthYear, "Niepoprawny format roku"); return; } if (birthYear > DateTime.Now.Year) { EPNewAuthor.SetError(tbBirthYear, "Narodziny autora nie mogą mieć miejsca w przyszłości."); return; } } if (editedAuthorID == 0) { using (BibliotekaDataContext db = new BibliotekaDataContext()) { if (birthYear > 0 && db.Autors.Count(x => x.imie == firstName && x.nazwisko == surName && x.rokUrodzenia != null && x.rokUrodzenia == birthYear) > 0) { MessageBox.Show("Autor, którego próbujesz dodać, istnieje już w bazie danych", "Autor już istnieje", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else if (birthYear == 0 && db.Autors.Count(x => x.imie == firstName && x.nazwisko == surName && x.rokUrodzenia == null) > 0) { MessageBox.Show("Autor, którego próbujesz dodać, istnieje już w bazie danych", "Autor już istnieje", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (birthYear == 0) { db.Autors.InsertOnSubmit(new Autor() { imie = firstName, nazwisko = surName, rokUrodzenia = null }); } else { db.Autors.InsertOnSubmit(new Autor() { imie = firstName, nazwisko = surName, rokUrodzenia = birthYear }); } try { db.SubmitChanges(); } catch (Exception) { MessageBox.Show("Wystąpił problem podczas dodawania autora do bazy danych", "Błąd bazy danych", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } tbFirstname.Text = ""; tbSurname.Text = ""; tbBirthYear.Text = ""; if (MessageBox.Show("Nowy autor został poprawnie zapisany w bazie danych.\r\nCzy chcesz kontynuować dodawanie?", "Operacja zakończona", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { DialogResult = DialogResult.OK; } } else /// tutaj zaczyna sie tryb edycji { using (BibliotekaDataContext db = new BibliotekaDataContext()) { Autor editedAuthor = null; try { editedAuthor = db.Autors.Where(x => x.id == editedAuthorID).Single(); } catch (Exception) { MessageBox.Show("W bazie danych nie ma autora, którego próbujesz edytować.", "Wystąpił błąd formularza.", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (editedAuthor.imie == firstName && editedAuthor.nazwisko == surName && ((editedAuthor.rokUrodzenia == null && birthYear == 0) || (editedAuthor.rokUrodzenia == birthYear))) { MessageBox.Show("Nie dokonałeś żadnych zmian. Operacja nie będzie kontynuowana.", "Brak zmian", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } editedAuthor.imie = firstName; editedAuthor.nazwisko = surName; if (birthYear == 0) editedAuthor.rokUrodzenia = null; else editedAuthor.rokUrodzenia = birthYear; try { db.SubmitChanges(); } catch (Exception) { MessageBox.Show("Wystąpił problem podczas modyfikowania autora w bazie danych", "Błąd bazy danych", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } MessageBox.Show("Autor został poprawnie zmodyfikowany w bazie danych.", "Operacja zakończona", MessageBoxButtons.OK, MessageBoxIcon.Information); DialogResult = DialogResult.OK; } } // koniec wyboru pomiedzy dodawaniem i edycja w czesci aktywnej }
private void btnAddNewCategory_Click(object sender, EventArgs e) { string newCategoryName = tbNewCategoryName.Text.Trim(); if (selectedCategory == null) { EPCategories.SetError(labSelectedCategoryName, "Wybierz kategorię nadrzędną"); return; } if (newCategoryName.Length > 50) { EPCategories.SetError(tbNewCategoryName, "Nazwa kategorii nie może być dłuższa niż 50 znaków"); return; } if (newCategoryName.Length < 3) { EPCategories.SetError(tbNewCategoryName, "Nazwa kategorii nie może być krótsza niż 3 znaki"); return; } if (Regex.IsMatch(newCategoryName, @"^[A-ZĘÓĄŚŁŻŹĆŃ]{1}") == false) { EPCategories.SetError(tbNewCategoryName, "Nazwa kategorii musi rozpoczynać się z wielkiej litery"); return; } if (Regex.IsMatch(newCategoryName, @"^[A-Za-zęóąśłżźćńĘÓĄŚŁŻŹĆŃ0-9\s]*[A-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃa-z0-9]+$", RegexOptions.Singleline) == false) { EPCategories.SetError(tbNewCategoryName, "Nazwa kategorii nie może zawierać innych znaków niż alfanumeryczne oraz spacje. Spacja nie może wystąpić na końcu"); return; } using (BibliotekaDataContext db = new BibliotekaDataContext()) { if (db.Kategorias.Count(x => x.nazwa == newCategoryName) > 0) { EPCategories.SetError(tbNewCategoryName, "Kategoria o podanej nazwie już istnieje"); return; } db.Kategorias.InsertOnSubmit(new Kategoria() { nazwa = newCategoryName, kategoriaNadrzednaID = selectedCategory.id }); 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 dodawania kategorii", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } tvCategories.SelectedNode.Nodes.Add(newCategoryName,newCategoryName); }
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; }