Exemplo n.º 1
0
        // Создание отчета о сводном составе для компонента
        private void ReportComponent(object sender, RoutedEventArgs e)
        {
            // Получение выбранного узла дерева
            TreeViewItem selectedItem = (TreeViewItem)treeView.SelectedItem;

            // Получение компонента по тегу данного узла
            ComponentsAll currentComponent = componentsAllQuery.AsQueryable().Cast <ComponentsAll>().Where(x => x.Id == (long)selectedItem.Tag).First();

            // Список Id внутренних уникальных компонентов данного компонета, все уровни
            List <long> childIDList = new List <long>();

            GetComponentsAllChildrensId(currentComponent, ref childIDList);

            // Если у выбранного компонента нет дочерних компонентов
            if (childIDList.Count == 0)
            {
                string messageBoxText = "Данный компонент не содержит дочерних компонентов.\nСоздание отчета о сводном составе невозможно.";
                string caption        = "Данный компонент не содержит дочерних компонентов";
                MessageBox.Show(messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Error);
            }
            // Вызов конструктора класса с экспортом в Word вложенных компонентов текущего компонента
            else
            {
                ExportToWord export = new ExportToWord(currentComponent, componentsAllQuery, componentsUniqueQuery, childIDList);
            }
        }
Exemplo n.º 2
0
        // Создание нового объекта TreeViewItem на основе компонента
        private TreeViewItem CreateNewItemFromComponent(ComponentsAll component)
        {
            // Создание нового объекта TreeViewItem
            TreeViewItem newitem = new TreeViewItem();

            // Создание вложенного компонента
            if (component.ParentId != 0)
            {
                // Тег элемента назначается по Id текущего компонента
                newitem.Tag = componentsAllQuery.AsQueryable().Cast <ComponentsAll>()
                              .Where(x => x.ParentId == component.ParentId)
                              .Where(x => x.ComponentId == component.ComponentId).First().Id;

                // Наименование нового компонента  по ComponentId из списка componentsList
                string componentName = componentsUniqueQuery.AsQueryable().Cast <ComponentsUnique>()
                                       .Where(x => x.Id == component.ComponentId).First().Name;
                // Количество компонентов
                long componentAmount = component.Amount;
                newitem.Header = componentName + " (" + componentAmount.ToString("0") + " шт.)";
            }
            // Создание нового коренного компонента
            else
            {
                // Тег элемента назначается по Id текущего компонента
                newitem.Tag = componentsAllQuery.AsQueryable().Cast <ComponentsAll>()
                              .Where(x => x.Name == component.Name).First().Id;

                newitem.Header = component.Name;
            }

            return(newitem);
        }
Exemplo n.º 3
0
        // Получение общего количества включений данного уникального компонента
        private long GetComponentAmountByID(ComponentsAll component, long amount)
        {
            try
            {
                // Получение родительского компонента из таблицы всех компонентов по его ID из таблицы всех компонентов
                ComponentsAll parentComponent = GetComponentAllByID(component.ParentId);

                // Выход из рекурсии, если достигнут целевой родитель
                if (parentComponent.Id == currentComponent.Id)
                {
                    return(1);
                }
                else
                {
                    // Перемножение количества дочерних компонентов на количество родительских компонентов
                    amount *= parentComponent.Amount;
                    // Рекурсивный вызов перегруженной  функции для просмотра вложенных компонентов
                    amount *= GetComponentAmountByID(parentComponent, amount);
                }
            }
            // Выход из рекурсии
            catch (Exception)
            {
            }

            return(amount);
        }
Exemplo n.º 4
0
        // Получение всех id родительских элементов данного компонента из таблицы всех/уникальных компонентов
        private List <long> GetComponentsParentsIds(ComponentsAll component, ref List <long> parentIdList, bool isSearchingForUniquesComponents)
        {
            // Компонент - дочерний
            if (component.ParentId > 0)
            {
                // Получение родительского компонента по component.ParentId, т.к. родитель может быть только один, вызываем .First()
                ComponentsAll parentComponent = componentsAllQuery.AsQueryable().Cast <ComponentsAll>().Where(x => x.Id == component.ParentId).First();

                // Если выпоняется поиск в таблице уникальных компонентов
                if (isSearchingForUniquesComponents == true)
                {
                    parentIdList.Add(parentComponent.ComponentId);
                }
                // Если выпоняется поиск в таблице всех компонентов
                else
                {
                    parentIdList.Add(parentComponent.Id);
                }

                // Рекурсивный вызов данной функции для каждого родительского компонента
                return(GetComponentsParentsIds(parentComponent, ref parentIdList, isSearchingForUniquesComponents));
            }

            return(parentIdList);
        }
Exemplo n.º 5
0
        // Получение общего количества включений данного уникального компонента по его id
        private long GetComponentAmountByID(long uniqueComponentID, List <long> allChildrensID)
        {
            long amount = 0;

            // Цикл для всех дочерних компонентов
            foreach (long id in allChildrensID)
            {
                // Получение компонента из таблицы всех компонентов по его ID из таблицы всех компонентов
                ComponentsAll component = GetComponentAllByID(id);

                // Если этот компонент является искомым уникальным компонентом
                if (component.ComponentId == uniqueComponentID)
                {
                    // Если родитель данного уникального компонента является компонентом, для которого формируется отчет
                    if (GetComponentAllByID(component.ParentId).Id == currentComponent.Id)
                    {
                        // Добавление количества данного компонента к общей сумме
                        amount += component.Amount;
                    }
                    // Случай, если у данного компонента родитель не является  компонентом, для которого формируется отчет
                    else
                    {
                        // Добавление количества данного компонента к общей сумме
                        amount += component.Amount;

                        // Рекурсивный вызов перегруженной  функции для просмотра вложенных компонентов
                        amount = GetComponentAmountByID(component, amount);
                    }
                }
            }

            return(amount);
        }
        // Конструктор класса для переименования вложенных компонентов
        public Dialog_RenameComponent(IQueryable compUniqueQuery, ComponentsAll currComponent)
        {
            InitializeComponent();

            this.Title            = "Переименование компонента";
            isNewRootComponent    = false;
            componentsUniqueQuery = compUniqueQuery;
            currentComponent      = currComponent;
        }
Exemplo n.º 7
0
        // Добавление коренного компонента
        private void NewRootComponent(object sender, RoutedEventArgs e)
        {
            // Использование диалога при переименовании файла для создание нового корневого компонента - используя другой конструктор класса
            Dialog_RenameComponent dialog_NewRootComponent = new Dialog_RenameComponent(componentsAllQuery);

            dialog_NewRootComponent.Owner = Window.GetWindow(this);
            dialog_NewRootComponent.ShowDialog();

            if (dialog_NewRootComponent.componentNewName != null)
            {
                // Получение максимального id в таблице
                // Индекс компонента должен быть больше, чем все предыдущие, во избежание перезаписи таблицы
                // Id нового компонента будет задано автоматически при db.ComponentsUniques.InsertOnSubmit(...)
                long currentAllComponentsMaxID = componentsAllQuery.AsQueryable().Cast <ComponentsAll>().Max(t => t.Id);

                // Создание нового компонента таблицы ComponentsAll
                ComponentsAll newComponentAll = new ComponentsAll()
                {
                    // Индекс компонента должен быть больше, чем все предыдущие, во избежание перезаписи таблицы
                    Id          = currentAllComponentsMaxID + 1,
                    ParentId    = 0,
                    ComponentId = 0,
                    Name        = dialog_NewRootComponent.componentNewName,
                    Amount      = 1
                };

                // Сохранение изменений в БД
                db.ComponentsAlls.InsertOnSubmit(newComponentAll);
                db.SubmitChanges();

                // Добавление нового элемента TreeViewItem по новому компоненту
                TreeViewItem newitem = CreateNewItemFromComponent(newComponentAll);

                // Добавление нового элемента TreeViewItem в корень treeView
                treeView.Items.Add(newitem);
            }

            // Сохранение изменений в БД
            db.SubmitChanges();

            // Сворачивание TreeView
            TreeViewCollapseAll();

            // Разворачивание компонентов первого уровня
            foreach (TreeViewItem item in treeView.Items)
            {
                item.IsExpanded = true;
            }
        }
Exemplo n.º 8
0
        // Переименование компонента
        private void RenameComponent(object sender, RoutedEventArgs e)
        {
            // Получение выбранного узла дерева
            TreeViewItem selectedItem = (TreeViewItem)treeView.SelectedItem;

            // Получение компонента по тегу данного узла
            ComponentsAll currentComponent = componentsAllQuery.AsQueryable().Cast <ComponentsAll>().Where(x => x.Id == (long)selectedItem.Tag).First();

            // Создание диалога с изменением компонента
            Dialog_RenameComponent dialog_RenameComponent = new Dialog_RenameComponent(componentsUniqueQuery, currentComponent);

            dialog_RenameComponent.Owner = Window.GetWindow(this);
            dialog_RenameComponent.ShowDialog();

            // Объект из диалога существует
            if (dialog_RenameComponent.componentNewName != null)
            {
                // Дочерний элемент treeView
                if (currentComponent.ParentId != 0)
                {
                    // Нахождение уникального компонента по ComponentId текущего компонента и замена в нем имени
                    componentsUniqueQuery.AsQueryable().Cast <ComponentsUnique>()
                    .Where(x => x.Id == currentComponent.ComponentId).First().Name = dialog_RenameComponent.componentNewName;
                }
                // Корневой элемент treeView
                else
                {
                    // Нахождение компонента по старому имени и замена в нем имени
                    componentsAllQuery.AsQueryable().Cast <ComponentsAll>()
                    .Where(x => x.Name == dialog_RenameComponent.componentOldName).First().Name = dialog_RenameComponent.componentNewName;
                }
            }

            // Сохранение изменений в БД
            db.SubmitChanges();

            // Сворачивание TreeView
            TreeViewCollapseAll();

            // Лист Id родительских компонентов данного компонента
            List <long> parensIDList = new List <long>();

            parensIDList = GetComponentsParentsIds(currentComponent, ref parensIDList, false).OrderBy(u => u).ToList();
            // Обновление treeView с раскрытием до текущего компонента
            RefreshTreeView(parensIDList);
        }
Exemplo n.º 9
0
        // Получение всех id уникальных дочерних элементов данного компонента из таблицы всех компонентов
        private void GetComponentsAllChildrensId(ComponentsAll currentComponent, ref List <long> allChildrensID)
        {
            // Если у данного компонента имеются дочерние (число дочерних компонентов != 0)
            if (componentsAllQuery.AsQueryable().Cast <ComponentsAll>()
                .Where(x => x.ParentId == currentComponent.Id).ToList().Count != 0)
            {
                // Цикл для всех дочерних элементов
                foreach (ComponentsAll component in componentsAllQuery.AsQueryable().Cast <ComponentsAll>()
                         .Where(x => x.ParentId == currentComponent.Id))
                {
                    // Добавление данного дочернего компонента в лист
                    allChildrensID.Add(component.Id);

                    // Рекурсивный вызов данной функции для каждого дочернего компонента
                    GetComponentsAllChildrensId(component, ref allChildrensID);
                }
            }
        }
Exemplo n.º 10
0
        // Получение всех id родительских элементов данного компонента из таблицы всех/уникальных компонентов
        private List <string> GetComponentsParentsNames(List <long> parentIdList)
        {
            List <string> parentNames = new List <string>();

            foreach (long id in parentIdList)
            {
                // Получение родительского компонента по component.ParentId, т.к. родитель может быть только один, вызываем .First()
                ComponentsAll parentComponent = componentsAllQuery.AsQueryable().Cast <ComponentsAll>().Where(x => x.Id == id).First();

                // Компонент - дочерний
                if (parentComponent.ParentId > 0)
                {
                    parentNames.Add(GetComponentUniquebyAllID(id).Name);
                }
                else
                {
                    parentNames.Add(parentComponent.Name);
                }
            }
            return(parentNames);
        }
Exemplo n.º 11
0
        internal ExportToWord(ComponentsAll curComponent, IQueryable compsAllQuery, IQueryable compsUniqueQuery, List <long> allChildrensID)
        {
            componentsAllQuery    = compsAllQuery;
            componentsUniqueQuery = compsUniqueQuery;
            currentComponent      = curComponent;

            // Нахождение имени компонента из БД
            string componentName;

            // Для корневых компонентов
            if (currentComponent.ComponentId == 0)
            {
                componentName = currentComponent.Name;
            }
            // Для дочерних компонентов
            else
            {
                componentName = componentsUniqueQuery.AsQueryable().Cast <ComponentsUnique>()
                                .Where(x => x.Id == currentComponent.ComponentId)
                                .First().Name;
            }

            // Инициализация сортированного словаря, где ключом является имя компонента, а значением - суммарное количество включений в данный компонент
            SortedDictionary <string, long> uniqueCompNamesWithTotalAmount = new SortedDictionary <string, long>();

            // Получение значений через лист allChildrensID - id дочерних компонентов данного компонента
            uniqueCompNamesWithTotalAmount = GetTotalAmountOfComponent(allChildrensID);

            // Количество строк таблицы
            int rowNumber = uniqueCompNamesWithTotalAmount.Count;

            //--------------------------------------

            // Создание экземпляра приложения MS Word
            wordapp = new Word.Application();

            // Установление видимости
            wordapp.Visible = true;

            // Свойства нового документа
            Object template     = Type.Missing;
            Object newTemplate  = false;
            Object documentType = Word.WdNewDocumentType.wdNewBlankDocument;
            Object visible      = true;

            fileName = Directory.GetCurrentDirectory() + @"\Отчет о сводном составе - " + componentName + ".docx";

            //Создание нового документа
            worddocument = wordapp.Documents.Add(ref template, ref newTemplate, ref documentType, ref visible);

            //--------------------------------------

            // Свойства новых параграфов
            object oMissing = System.Reflection.Missing.Value;

            // Создание двух параграфов
            worddocument.Paragraphs.Add(ref oMissing);
            worddocument.Paragraphs.Add(ref oMissing);

            // Индекс текущей строки
            int currentRow = 1;

            // Получение параграфов текущей строки
            wordparagraph = worddocument.Paragraphs[currentRow];

            //Ввод текста в первый параграф
            wordparagraph.Range.Text = "Отчет о сводном составе для компонента \"" + componentName + "\":";

            // Переход на следующую строку
            currentRow++;

            //--------------------------------------

            // Получение параграфов текущей строки
            wordparagraph = worddocument.Paragraphs[currentRow];

            //Добавление таблицы в документ
            Word.Range wordrange            = wordparagraph.Range;
            object     defaultTableBehavior = Word.WdDefaultTableBehavior.wdWord9TableBehavior;
            object     autoFitBehavior      = Word.WdAutoFitBehavior.wdAutoFitWindow;

            //Добавляем таблицу и получаем объект wordtable
            Word.Table wordtable = worddocument.Tables.Add(wordrange, rowNumber, 2, ref defaultTableBehavior, ref autoFitBehavior);

            // Заполнение таблицы
            for (int i = 1; i <= rowNumber; i++)
            {
                // Добавление значений в выбранную ячейку первого столбца
                Word.Range wordcellrange1Column = wordtable.Cell(i, 1).Range;
                wordcellrange1Column.Text = uniqueCompNamesWithTotalAmount.ElementAt(i - 1).Key;

                // Добавление значений в выбранную ячейку второго столбца
                Word.Range wordcellrange2Column = wordtable.Cell(i, 2).Range;
                wordcellrange2Column.Text = uniqueCompNamesWithTotalAmount.ElementAt(i - 1).Value.ToString() + " шт.";
            }

            //--------------------------------------

            // Сохранение с именем fileName
            try
            {
                worddocument.SaveAs2(fileName);
            }
            // Если файл уже открыт
            catch (Exception e)
            {
                string messageBoxText = e.Message;
                string caption        = "Ошибка";
                MessageBox.Show(messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Exemplo n.º 12
0
 // Получение всех id уникальных дочерних элементов данного компонента из таблицы уникальных компонентов
 private List <long> GetComponentsUniqueChildrensId(ComponentsAll currentComponent)
 {
     return(componentsAllQuery.AsQueryable().Cast <ComponentsAll>()
            .Where(x => x.ParentId == currentComponent.Id).Select(s => s.ComponentId).ToList());
 }
Exemplo n.º 13
0
 partial void InsertComponentsAll(ComponentsAll instance);
Exemplo n.º 14
0
 partial void UpdateComponentsAll(ComponentsAll instance);
Exemplo n.º 15
0
 partial void DeleteComponentsAll(ComponentsAll instance);
Exemplo n.º 16
0
        // Удаление компонента
        private void DeleteComponent(object sender, RoutedEventArgs e)
        {
            // Получение выбранного узла дерева
            TreeViewItem selectedItem = (TreeViewItem)treeView.SelectedItem;

            // Получение компонента по тегу данного узла
            ComponentsAll currentComponent = componentsAllQuery.AsQueryable().Cast <ComponentsAll>().Where(x => x.Id == (long)selectedItem.Tag).First();

            // Лист Id родительских компонентов данного компонента
            List <long> parensIDList = new List <long>();

            parensIDList = GetComponentsParentsIds(currentComponent, ref parensIDList, false).OrderBy(u => u).ToList();

            // Список Id внутренних уникальных компонентов данного компонета, все уровни
            List <long> childIDList = new List <long>();

            GetComponentsAllChildrensId(currentComponent, ref childIDList);

            // Если у данного компонента есть вложенные компоненты
            if (childIDList.Count != 0)
            {
                // Вывод предуреждения о переименовании
                string messageBoxText = "Удалить компонент \"" + selectedItem.Header + " \"? \nУдаление данного компонента приведет за собой удаление следующих компонентов:";
                // Вывод в предупреждении список всех дочерних элементов, которые будут удалены
                foreach (long id in childIDList)
                {
                    messageBoxText += "\n   - " + GetComponentUniquebyAllID(id).Name;
                }
                string           caption = "Удаление компонента";
                MessageBoxResult result  = MessageBox.Show(messageBoxText, caption, MessageBoxButton.OKCancel, MessageBoxImage.Question);

                if (result == MessageBoxResult.OK)
                {
                    // Удаление всех дочерних компонентов из БД
                    foreach (long id in childIDList)
                    {
                        db.ComponentsAlls.DeleteOnSubmit(GetComponentAllByID(id));
                    }
                    // Удаление данного компонента из БД
                    db.ComponentsAlls.DeleteOnSubmit(currentComponent);
                }
                if (result == MessageBoxResult.Cancel)
                {
                }
            }
            else
            {
                // Вывод предуреждения о переименовании
                string           messageBoxText = "Удалить компонент \"" + selectedItem.Header + " \"? ";
                string           caption        = "Удаление компонента";
                MessageBoxResult result         = MessageBox.Show(messageBoxText, caption, MessageBoxButton.OKCancel, MessageBoxImage.Question);

                if (result == MessageBoxResult.OK)
                {
                    // Удаление данного компонента из БД
                    db.ComponentsAlls.DeleteOnSubmit(currentComponent);
                }
                if (result == MessageBoxResult.Cancel)
                {
                }
            }

            // Сохранение изменений в БД
            db.SubmitChanges();

            // Сворачивание TreeView
            TreeViewCollapseAll();

            // Обновление treeView с раскрытием до текущего компонента
            RefreshTreeView(parensIDList);
        }
Exemplo n.º 17
0
        // Добавление дочернего компонента
        private void NewInsideComponent(object sender, RoutedEventArgs e)
        {
            // Получение выбранного узла дерева
            TreeViewItem selectedItem = (TreeViewItem)treeView.SelectedItem;

            // Получение компонента по тегу данного узла
            ComponentsAll currentComponent = componentsAllQuery.AsQueryable().Cast <ComponentsAll>().Where(x => x.Id == (long)selectedItem.Tag).First();

            // Получение списка ID родителей данного компонента - нужно для последующего обновления дерева
            List <long> parensIDListUnique = new List <long>();

            parensIDListUnique.Add(currentComponent.ComponentId);
            parensIDListUnique = GetComponentsParentsIds(currentComponent, ref parensIDListUnique, true);

            // Лист Id родительских компонентов данного компонента
            List <long> parensIDListAll = new List <long>();

            parensIDListAll.Add(currentComponent.Id);
            parensIDListAll = GetComponentsParentsIds(currentComponent, ref parensIDListAll, false).OrderBy(u => u).ToList();

            // Создание диалога с добавлением нового компонента
            // Индекс компонента должен быть больше, чем все предыдущие, во избежание перезаписи таблицы
            // Id нового компонента будет задано автоматически при db.ComponentsUniques.InsertOnSubmit(...)
            Dialog_NewComponent dialog_NewComponent = new Dialog_NewComponent(componentsUniqueQuery, parensIDListUnique);

            dialog_NewComponent.Owner = Window.GetWindow(this);
            dialog_NewComponent.ShowDialog();

            // Получение максимального id в обеих таблицах - Индекс компонента должен быть больше, чем все предыдущие, во избежание перезаписи таблицы
            long currentAllComponentsMaxID    = componentsAllQuery.AsQueryable().Cast <ComponentsAll>().Max(t => t.Id);
            long currentUniqueComponentsMaxID = componentsUniqueQuery.AsQueryable().Cast <ComponentsUnique>().Max(t => t.Id);

            // Объект из диалога существует (нажата кнопка ОК)
            if (dialog_NewComponent.newComponent != null && dialog_NewComponent.newComponent.Name != null)
            {
                // Уникальный компонент еще не существует
                if (dialog_NewComponent.newComponent.Id > currentUniqueComponentsMaxID)
                {
                    // Добавление нового уникального компонента
                    ComponentsUnique newComponentUnique = new ComponentsUnique()
                    {
                        // Индекс компонента должен быть больше, чем все предыдущие, во избежание перезаписи таблицы
                        Id   = dialog_NewComponent.newComponent.Id,
                        Name = dialog_NewComponent.newComponent.Name,
                    };

                    // Сохранение изменений в БД
                    db.ComponentsUniques.InsertOnSubmit(newComponentUnique);
                    db.SubmitChanges();

                    // Создание нового компонента таблицы ComponentsAll
                    ComponentsAll newComponentAll = new ComponentsAll()
                    {
                        // Индекс компонента должен быть больше, чем все предыдущие, во избежание перезаписи таблицы
                        Id       = currentAllComponentsMaxID + 1,
                        ParentId = (long)selectedItem.Tag,
                        // Нахождение Id уникального компонента по имени
                        ComponentId = componentsUniqueQuery.AsQueryable().Cast <ComponentsUnique>()
                                      .Where(x => x.Name == newComponentUnique.Name).First().Id,
                        Name   = "",
                        Amount = dialog_NewComponent.newComponentAmount
                    };

                    // Сохранение изменений в БД
                    db.ComponentsAlls.InsertOnSubmit(newComponentAll);
                    db.SubmitChanges();

                    // Добавление нового элемента TreeViewItem по новому компоненту
                    TreeViewItem newitem = CreateNewItemFromComponent(newComponentAll);

                    // Добавление нового элемента TreeViewItem в treeView под выбранным узлом selectedItem
                    selectedItem.Items.Add(newitem);
                }

                // Уникальный компонент уже существует
                else
                {
                    // Список Id внутренних уникальных компонентов данного компонета
                    List <long> childIDList = GetComponentsUniqueChildrensId(currentComponent);

                    // Изменение количества уже добавленного компонента
                    // Если Id любого внутреннего уникальных компонента равен id добавляемого уникального компонента
                    if (childIDList.Any(x => x == dialog_NewComponent.newComponent.Id))
                    {
                        // Выбор компонента, в котором нужно изменить значение
                        // Добавление нового значения  dialog_NewComponent.newComponentAmount к существующему Amount
                        componentsAllQuery.AsQueryable().Cast <ComponentsAll>()
                        .Where(x => x.ComponentId == dialog_NewComponent.newComponent.Id)
                        .Where(x => x.ParentId == (long)selectedItem.Tag)
                        .First().Amount += dialog_NewComponent.newComponentAmount;
                    }

                    // Данный уникальный компонент отсутствует в ветке
                    // Добавление существующего уникального компонента в текущую ветку
                    else
                    {
                        List <string> parentNames = GetComponentsParentsNames(parensIDListAll);

                        if (parentNames.Contains(dialog_NewComponent.newComponent.Name))
                        {
                            // Вывод предуреждения о переименовании
                            string           messageBoxText = "Компонент \"" + dialog_NewComponent.newComponent.Name + " \" уже присутствует в данной ветке.\nДобавление невозможно.";
                            string           caption        = "Добавление компонента невозможно";
                            MessageBoxResult result         = MessageBox.Show(messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Question);
                        }
                        else
                        {
                            ComponentsAll newComponentAll = new ComponentsAll()
                            {
                                Id          = currentAllComponentsMaxID + 1,
                                ParentId    = (long)selectedItem.Tag,
                                ComponentId = dialog_NewComponent.newComponent.Id,
                                Name        = "",
                                Amount      = dialog_NewComponent.newComponentAmount
                            };

                            // Сохранение изменений в БД
                            db.ComponentsAlls.InsertOnSubmit(newComponentAll);
                            db.SubmitChanges();

                            // Создание нового элемента TreeViewItem по текущему компоненту
                            TreeViewItem newitem = CreateNewItemFromComponent(newComponentAll);

                            // Добавление нового элемента TreeViewItem в treeView под выбранным узлом selectedItem
                            selectedItem.Items.Add(newitem);
                        }
                    }
                }

                // Сохранение изменений в БД. Мало ли.
                db.SubmitChanges();

                // Сворачивание TreeView
                TreeViewCollapseAll();

                // Обновление treeView - разворачивание узлов из списка parensIDListAll
                RefreshTreeView(parensIDListAll);
            }
        }