예제 #1
0
 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);
 }
예제 #2
0
        /// 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
        }
예제 #3
0
        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);
        }
예제 #4
0
        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;
        }