Невозможно добавить узел в древовидную структуру после выбора любого элемента, получающего ошибку. Индекс должен находиться в пределах списка. Имя параметра: индекс - PullRequest
0 голосов
/ 30 июня 2011

Когда я добавляю узел в древовидную структуру после выбора какого-либо узла, некоторое время его добавление, а некоторое время, когда элемент не добавляется и не выдает ошибку, должен быть в пределах списка.Имя параметра: индекс

Код, по которому я следую, -

public void AddWorkflowItem()
        {
            DeletePageNoFromContentTreeView();
            string ToolTips = null;
            if (baseCase.LockUser == null)
            {
                View.ResultOperation.Message =
                    "Case has been unlocked by ACR Production Specialist. System is unable to save changes.";
                View.ResultOperation.IsSuccessfully = false;
                return;
            }
            if (baseCase.LockUser.Id != AuthenticationService.CurrentUser.Id)
            {
                View.ResultOperation.Message =
                    new StringBuilder("Case has been locked by ")
                        .Append(baseCase.LockUser.Profile.Degree + " ")
                        .Append(baseCase.LockUser.Profile.FirstName + " ")
                        .Append(baseCase.LockUser.Profile.LastName + ". System is unable to save changes.")
                        .ToString();
                View.ResultOperation.IsSuccessfully = false;
                return;
            }
            CipCaseWorkflowItem newItem = null;
            ISet<CipCaseWorkflowItem> list = GetCaseWorkflow();
            CaseContentItemType selectedItem =
                (CaseContentItemType)
                Enum.Parse(typeof(CaseContentItemType), View.AddCaseContentItemTypeList.SelectedValue);
            ContentElementType selectedTextItem = ContentElementType.None;
            switch (selectedItem)
            {
                case CaseContentItemType.BaseCaseTextElement:
                    selectedTextItem =
                        (ContentElementType)
                        Enum.Parse(typeof(ContentElementType), View.AddCaseContentSubItemTypeList.SelectedValue);
                    //GetContentElementType(View.AddCaseContentSubItemTypeList.SelectedValue);//
                    newItem = new CipTextElementScriptItem(cipCase, selectedTextItem);
                    newItem.Type = selectedItem;
                    newItem.IsEmpty = true;
                    break;
                case CaseContentItemType.TemplatedItem:
                    CaseContentTemplatedItemType selectedTemplateItem =
                        (CaseContentTemplatedItemType)
                        Enum.Parse(typeof(CaseContentTemplatedItemType),
                                   View.AddCaseContentSubItemTypeList.SelectedValue);
                    //newItem = new CipTemplatedScriptItem(cipCase, selectedTemplateItem);
                    newItem = CreateCipWorkflowTemplatedItem(cipCase, selectedTemplateItem);
                    newItem.IsEmpty = false;
                    break;
                case CaseContentItemType.Question:
                    newItem = new CipQuestionScriptItem(cipCase);
                    ((CipQuestionScriptItem)newItem).ColumnsNo = 1;
                    newItem.Type = selectedItem;
                    if (View.AddActiveView == CaseContentAddActiveView.NoQuestions)
                    {
                        newItem.IsEmpty = true;
                        ToolTips = string.Empty;
                    }
                    else
                    {
                        int questionId = Int32.Parse(View.AddQuestionList.SelectedValue);
                        QuestionElement question = FindQuestionById(questionId);
                        ((CipQuestionScriptItem)newItem).QuestionElement = question;
                        newItem.IsEmpty = false;
                        ToolTips = question.GetToolTip();
                    }
                    break;
                case CaseContentItemType.CaseCredits:
                case CaseContentItemType.PageBreak:
                case CaseContentItemType.CIPCMEGraphic:
                case CaseContentItemType.CaseAuthours:
                case CaseContentItemType.CMEInfo:
                case CaseContentItemType.PostTest:
                case CaseContentItemType.EmptyLine:
                case CaseContentItemType.HorizontalLine:
                    newItem = new CipCaseWorkflowItem(cipCase, selectedItem);
                    newItem.IsEmpty = false;
                    break;
                    case CaseContentItemType.Image:
                    newItem = new CipImageScriptItem(cipCase);
                    newItem.IsEmpty = false;                    
                    break;
                default:
                    throw new ApplicationException("Invalid context item type.");
            }
            TreeNode selectedNode = contentTreeView.SelectedNode;
            newItem.IsHidden = false;
            //TreeNode rootNode = contentTreeView.Nodes[0];
            if ((selectedNode != null) && !string.IsNullOrEmpty(selectedNode.Value))
            {
                CaseContentItemType itemType;
                ContentElementType textElementType;
                CaseContentTemplatedItemType templatedItemType;
                int id;
                string nodeId = selectedNode.Value;
                ParseNodeId(nodeId, out itemType, out textElementType, out templatedItemType, out id);
                CipCaseWorkflowItem current = FindSelectedItemIdById(id);
                int newItemSortField = current.SortField + 1;
                newItem.SortField = newItemSortField;
                IncreaseSortIndex(newItemSortField);
                cipCase.WorkflowItems.Add(newItem);
            }
            else
            {
                int maxIndex;
                GetMaxIndex(list, out maxIndex);
                maxIndex++;
                newItem.SortField = maxIndex;
                cipCase.WorkflowItems.Add(newItem);
            }
            if (selectedItem != CaseContentItemType.Question)
                FindAndAttachSingleItem(selectedItem, selectedTextItem, newItem, out ToolTips);
            baseCase.LastEditedDate = DateTime.Now;
            Ioc.Resolve<IWebSessionManager>().CurrentSession.Flush();
            TreeNode newNode = CreateTreeNode(newItem, null);
            if (ToolTips != null)
                newNode.ToolTip = AddContentItemStateToToolTip(newItem.IsHidden, ToolTips);
            else
                newNode.ToolTip = AddContentItemStateToToolTip(newItem.IsHidden, string.Empty);
            if (selectedNode != null)
                contentTreeView.Nodes.AddAt(newItem.SortField, newNode);
            else
                contentTreeView.Nodes.Add(newNode);
               SetWorkflowActionButtonState();
            if (selectedItem == CaseContentItemType.CaseCredits)
                SetupAddCombos();
            if (selectedItem == CaseContentItemType.Question)
                SetupSubItemCombo(selectedItem);

            DeletePageNoFromContentTreeView();
            SetupPagenumbersToContentTreeView();
            if (selectedItem == CaseContentItemType.Image)
            {
                SetupPageForSelectedNode(newNode);
                //View.AddActiveView = CaseContentAddActiveView.Images;
            }

            newNode.Select();
            SetupPageForSelectedNode(newNode);
            SetWorkflowActionButtonState();
        }

защищенный пустотидущий в этой строке

  if (selectedNode != null)
                contentTreeView.Nodes.AddAt(newItem.SortField, newNode);

1 Ответ

0 голосов
/ 05 июля 2011

Вызовите эту функцию перед вызовом DeletePageNoFromContentTreeView();

    protected void ResortWorkflowItems()
    {
        int i = 0;
        foreach (CipCaseWorkflowItem item in cipCase.WorkflowItems)
            item.SortField = i++;
        baseCase.LastEditedDate = DateTime.Now;
        Ioc.Resolve<IWebSessionManager>().CurrentSession.Flush();
    }
...