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); }
private void LoadEditBookMode() { using (BibliotekaDataContext db = new BibliotekaDataContext()) { List<Autor> a = db.Autors.ToList(); bookAuthors.LoadAuthorsOfBook(bookID); List<Kategoria> k = db.Kategorias.Where(x => x.kategoriaNadrzednaID == null).ToList(); bookCategories.SetCategories(k); } }
public void LoadAuthorsOfBook(int BookID) { bookID = BookID; List<Autor> currentAuthors = null; using (BibliotekaDataContext db = new BibliotekaDataContext()) { List<int> bookAuthorsID = db.KsiazkaAutoras.Where(x => x.ksiazkaID == bookID).Select(x => x.autorID).ToList(); currentAuthors = db.Autors.Where(x => bookAuthorsID.Contains(x.id)).ToList(); } foreach (Autor author in currentAuthors) authorsList.Add(author); RefreshContent(); }
/// 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 btnSearchAuthors_Click(object sender, EventArgs e) { string authorInfix = tbAuthorNameInfix.Text.Trim(); string sBYLowBound = tbBirthYearLowBound.Text.Trim(); string sBYHighBound = tbBirthYearHighBound.Text.Trim(); short iBYLowBound = 0; // dolna granica wieku short iBYHighBound = 0; // gorna granica wieku bool BYFiltering = false; // wylaczone filtrowanie wieku bool lowYearFilter = false; // wylaczone dolne filtrowanie wieku bool highYearFilter = false; // wylaczone gorne filtrowanie wieku bool addNullYearFilter = true; // wlaczone filtrowanie NULL we wieku /// filtrowanie szukanego ciągu if (authorInfix.Length < 2) { EPAuthors.SetError(tbAuthorNameInfix, "Szukany ciąg nie może być krótszy niż 2 znaki"); return; } if (authorInfix.Length > 71) { EPAuthors.SetError(tbAuthorNameInfix, "Szukany ciąg nie może być dłuższy niż 71 znaków"); return; } if (Regex.IsMatch(authorInfix, @"^[\p{L}\-'\.\s]+$", RegexOptions.Singleline) == false) { EPAuthors.SetError(tbAuthorNameInfix, "Szukany ciąg zawiera niedozwolone znaki"); return; } /// jesli filtrowanie po roku urodzenia wlaczane if (cbBirthYearFilter.Checked == true) { BYFiltering = true; if (cbBirthYearAcceptNull.Checked == true) addNullYearFilter = false; /// dodaje do wynikow rekordy z NULL w roku urodzenia /// jeśli filtrowanie dolne właczane if (sBYLowBound != "") { lowYearFilter = true; /// walidacja roku urodzenia if (isBirthYearFormatValid(sBYLowBound) == false) { EPAuthors.SetError(tbBirthYearLowBound, "Niepoprawny format roku"); return; } try { iBYLowBound = short.Parse(sBYLowBound); } catch (Exception) { EPAuthors.SetError(tbBirthYearLowBound, "Niepoprawny format roku"); return; } if (iBYLowBound > DateTime.Now.Year) { EPAuthors.SetError(tbBirthYearLowBound, "Rok nie może być wyższy od bieżącego"); return; } } /// jesli filtrowanie gorne wlaczone if (sBYHighBound != "") { highYearFilter = true; /// walidacja roku urodzenia if (isBirthYearFormatValid(sBYHighBound) == false) { EPAuthors.SetError(tbBirthYearHighBound, "Niepoprawny format roku"); return; } try { iBYHighBound = short.Parse(sBYHighBound); } catch (Exception) { EPAuthors.SetError(tbBirthYearHighBound, "Niepoprawny format roku"); return; } if (iBYHighBound > DateTime.Now.Year) { EPAuthors.SetError(tbBirthYearHighBound, "Rok nie może być wyższy od bieżącego"); return; } } } /// END-IF filtrowanie roku wlaczone /// sql-injection nie jest mozliwy podczas linkowania dynamicznego w linq List<Autor> results = null; // pojemnik na rezultat /// szukanie danych using (BibliotekaDataContext db = new BibliotekaDataContext()) { IQueryable<Autor> iQuery; /// kompozycja zapytania dla szukania w imieniu i nazwisku autora if (cbMatchInAttribute.SelectedIndex == 0) // szukanie tylko w nazwisku { if (cbMatchAlign.SelectedIndex == 0) // szukanie infix-ow { iQuery = db.Autors.Where(x => x.nazwisko.Contains(authorInfix)); } else if (cbMatchAlign.SelectedIndex == 1) // szukanie prefix-ow { iQuery = db.Autors.Where(x => x.nazwisko.StartsWith(authorInfix)); } else // szukanie suffix-ow { iQuery = db.Autors.Where(x => x.nazwisko.EndsWith(authorInfix)); } } else if (cbMatchInAttribute.SelectedIndex == 1) // szukanie w zlaczeniu imie_nazwisko { if (cbMatchAlign.SelectedIndex == 0) // szukanie infix-ow { iQuery = db.Autors.Where(x => string.Concat(x.imie, " ", x.nazwisko).Contains(authorInfix)); } else if (cbMatchAlign.SelectedIndex == 1) // szukanie prefix-ow { iQuery = db.Autors.Where(x => string.Concat(x.imie, " ", x.nazwisko).StartsWith(authorInfix)); } else // szukanie suffix-ow { iQuery = db.Autors.Where(x => string.Concat(x.imie, " ", x.nazwisko).EndsWith(authorInfix)); } } else // szukanie tylko w imieniu { if (cbMatchAlign.SelectedIndex == 0) // szukanie infix-ow { iQuery = db.Autors.Where(x => x.imie.Contains(authorInfix)); } else if (cbMatchAlign.SelectedIndex == 1) // szukanie prefix-ow { iQuery = db.Autors.Where(x => x.imie.StartsWith(authorInfix)); } else // szukanie suffix-ow { iQuery = db.Autors.Where(x => x.imie.EndsWith(authorInfix)); } } if (BYFiltering) { /// kompozycja zapytania dla filtrowania roku if (lowYearFilter && highYearFilter) { if (addNullYearFilter) iQuery = iQuery.Where(x => x.rokUrodzenia >= iBYLowBound && x.rokUrodzenia <= iBYHighBound && x.rokUrodzenia != null); else iQuery = iQuery.Where(x => x.rokUrodzenia==null || x.rokUrodzenia >= iBYLowBound && x.rokUrodzenia <= iBYHighBound); } else if (lowYearFilter) { if (addNullYearFilter) iQuery = iQuery.Where(x => x.rokUrodzenia >= iBYLowBound && x.rokUrodzenia != null); else iQuery = iQuery.Where(x => x.rokUrodzenia == null || x.rokUrodzenia >= iBYLowBound); } else if (highYearFilter) { if (addNullYearFilter) iQuery = iQuery.Where(x => x.rokUrodzenia <= iBYHighBound && x.rokUrodzenia != null); else iQuery = iQuery.Where(x => x.rokUrodzenia == null || x.rokUrodzenia <= iBYHighBound); } } /// --- REZULTAT results = iQuery.OrderBy(x => x.imie).OrderBy(x => x.nazwisko).ToList(); }/// END-USING /// wyswietlanie wynikow if (results.Count > 0) { dgvAuthors.AttachNewData(results); } else { MessageBox.Show("Nie znaleziono autorów spełniających kryteria wyszukiwania.", "Brak wyników", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
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 LoadCategoryTreeLevel(TreeNodeCollection CurrentRootTreeNodeSubs, int CurrentRootCID=0) { List<Kategoria> subCategories = null; using (BibliotekaDataContext db = new BibliotekaDataContext()) { if(CurrentRootCID==0) subCategories = db.Kategorias.Where(x => x.kategoriaNadrzednaID == null).OrderBy(x => x.id).ToList(); else subCategories = db.Kategorias.Where(x => x.kategoriaNadrzednaID == CurrentRootCID).OrderBy(x => x.id).ToList(); } if (subCategories.Count == 0) return; foreach (Kategoria child in subCategories) { TreeNode tn = CurrentRootTreeNodeSubs.Add(child.nazwa, child.nazwa); LoadCategoryTreeLevel(tn.Nodes, child.id); } }
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; }