When i am adding node in treeview after selecting any node some time its adding and some time item not adding and giving an error Index must be within the bounds of the List. Parameter name: index
Code i am following is
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();
}
protected void IncreaseSortIndex(int sortIndex)
{
foreach (CipCaseWorkflowItem item in cipCase.WorkflowItems)
{
if (item.SortField >= sortIndex)
item.SortField++;
}
}
error is coming in this line
if (selectedNode != null)
contentTreeView.Nodes.AddAt(newItem.SortField, newNode);
Call this function before the call of
DeletePageNoFromContentTreeView();