Коллекция была изменена; с помощью treenode и foreach loop и linq в windows form.
Привет,
У меня есть код ниже, когда я запускаю свое приложение, оно выдает мне ошибку: "коллекция была изменена."
MyTreeNode Node; //-----SYSTEM----- //Gets the SYSTEMS into the variable currentSystems var currentSystems = DAObject.fetch("SELECT * FROM TSystem").AsEnumerable(); if (currentSystems.Count() > 0) foreach (DataRow systemRow in currentSystems) { Node = new MyTreeNode( systemRow["strSystemName"].ToString(), DAObject.GetLinage(systemRow["strFormIdName"].ToString()).ToString(), systemRow["strFormIdName"].ToString() ); Node.ForeColor = Color.Green; treeView1.Nodes.Add(Node); //-----SUBSYSTEMS----- //Gets the system SUBSYSTEMS into the variable currentSystemSubSystems var currentSystemSubSystems = from subSystem in (DAObject.fetch("SELECT * FROM TSubSystem").AsEnumerable()) where subSystem["nSystemId"] == systemRow["nSystemId"] select subSystem; if (currentSystemSubSystems.Count() > 0) foreach (DataRow subSystemRow in currentSystemSubSystems) { Node = new MyTreeNode( subSystemRow["strSubsystemName"].ToString(), DAObject.GetLinage(subSystemRow["strSubFormID"].ToString()).ToString(), subSystemRow["strSubFormID"].ToString() ); Node.ForeColor = Color.Green; treeView1.Nodes.Add(Node); //-----MENUS----- //Gets the Subsystem MENUS into the variable currentSubSystemMenus var currentSubSystemMenus = from Menu in (DAObject.fetch("SELECT * FROM TMenu").AsEnumerable()) where Menu["nSubsytemId"] == subSystemRow["nSubsytemId"] select Menu; if (currentSubSystemMenus.Count() > 0) foreach (DataRow menuRow in currentSubSystemMenus) //First time error comes up at this line, when I continue it occurs on other loops { Node = new MyTreeNode( subSystemRow["strMenuname"].ToString(), DAObject.GetLinage(subSystemRow["strMenuFormID"].ToString()).ToString(), subSystemRow["strMenuFormID"].ToString() ); Node.ForeColor = Color.Green; treeView1.Nodes.Add(Node); //-----SUBMENUS----- //Gets the Menu SUBMENUS into the variable currentMenuSubMenus var currentMenuSubMenus = from subMenu in (DAObject.fetch("SELECT * FROM TSubMenu").AsEnumerable()) where subMenu["nMenuID"] == menuRow["nMenuID"] select subMenu; if (currentMenuSubMenus.Count() > 0) foreach (DataRow subMenuRow in currentMenuSubMenus) { Node = new MyTreeNode( subSystemRow["strSubMenuName"].ToString(), DAObject.GetLinage(subSystemRow["strSubMenuFormID"].ToString()).ToString(), subSystemRow["strSubMenuFormID"].ToString() ); Node.ForeColor = Color.Green; treeView1.Nodes.Add(Node); } Menu_count += 1; } SubSystem_count += 1; } System_count += 1; }
Я читаю его, но не вижу, в чем проблема,
таблицы данных и строки данных правильно заполнены и оценены.
Е1:
После поиска я увидел,что похоже, что dataTable удаляется после первой итерации цикла меню foreach. Не знаю почему.
Что я уже пробовал:
Я все еще работаю над этим, но пока не могу найти никакого решения.
RickZeeland
Попробуйте заменить foreach конструкцией for или loop, это может помочь.
BillWoodruff
Попробуйте одноступенчато Просмотреть код, чтобы точно определить место возникновения ошибки, и обновите свой вопрос. Назначение нового TreeNode полю TreeNode не может привести к ошибке, о которой вы сообщаете.
m.r.m.40
он читает строку,
по каждому элементу (ВАР menuRow в currentSubSystemMenus)
в первый раз, прочитав его и попытавшись проверить еще раз, он удерживает слово "in" в состоянии foreach. и дает мне ошибку, я не вижу, в чем проблема.
Karthik_Mahalingam
пробовать
foreach (var menuRow в currentSubSystemMenus.Список())
Maciej Los
Не делайте репостов!
http://www.codeproject.com/Questions/1123279/Creating-treenode-dynamicaly-and-recieving-an-erro