コード例 #1
0
        private void ButtonDeleteClick(object sender, EventArgs e)
        {
            if (listViewBindedTasks.SelectedItems.Count == 0)
            {
                return;
            }

            //Коллекция элементов которые нужно добавить в элемента управления содержащий список всех задач
            var itemsToInsert    = new CommonCollection <BaseEntityObject>();
            var detailDirectives = listViewBindedTasks.SelectedItems.OfType <ComponentDirective>().ToList();

            foreach (var selectedItem in detailDirectives)
            {
                try
                {
                    //Если задача по компоненту была сохранена в бд , то добавляем в список удаляемых элементов
                    if (selectedItem.ItemId > 0)
                    {
                        itemsToInsert.Add(selectedItem);
                        _bindedItemsToRemove.Add(selectedItem);
                    }

                    //Удаление задачи по компоненту  из коллекции содержащей все связаные задачи
                    _bindedItems.Remove(selectedItem);

                    //Удаление задачи по  компоненту из элемента управления содержащего список всех привязаных задач
                    listViewBindedTasks.RemoveItem(selectedItem);

                    //если в коллекции содержащей все связные задачи не содержится задач по компоненту,
                    //которые принадлежат тому же компоненту что и текущая задача
                    //требуется удалить компонент из коллекции содержащей все связные задачи
                    if (_bindedItems.OfType <ComponentDirective>().All(x => x.ParentComponent.ItemId != selectedItem.ParentComponent.ItemId))
                    {
                        _bindedItems.Remove(selectedItem.ParentComponent);
                        //Удаление компонента из элемента управления содержащего список всех привязаных задач
                        listViewBindedTasks.RemoveItem(selectedItem.ParentComponent);
                    }

                    if (_newBindedItems.ContainsKey(selectedItem.ParentComponent))
                    {
                        //Удаление задачи по компоненту из коллекции новых привязанных зачач по компоненту
                        _newBindedItems[selectedItem.ParentComponent].Remove(selectedItem);
                        //Если среди новых привязанных задач по компоненту не содержатся задачи по компонентам,
                        //которые принадлежат тому же компоненту что и текущая задача
                        //требуется удалить компонент из словаря
                        if (_newBindedItems[selectedItem.ParentComponent].Count == 0)
                        {
                            _newBindedItems.Remove(selectedItem.ParentComponent);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Program.Provider.Logger.Log("Error while delete bind task record", ex);
                }
            }

            listViewTasksForSelect.InsertItems(itemsToInsert);
        }