コード例 #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
        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);
            }
        }
コード例 #3
0
 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();
 }
コード例 #4
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
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
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);
        }
コード例 #7
0
 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);
     }
 }
コード例 #8
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;
        }