2017-02-09 12 views
2

У меня есть элемент управления TreeView Telerik, и у меня есть проблемы с RemoveAt(0), когда у 1 элемента не удается удалить элемент. Как это возможно?RemoveAt on collection failed

Вот пример того, что у меня есть:

- ParentNode 
    |- child1 
    |- child2 

TreeViewNode.Nodes является RadTreeNodeCollection объектом
RadTreeNodeCollection является NotifyCollection<RadTreeNode>
NotifyCollection<T> является Collection<T> (с извещать интерфейсы изменения свойств)
и Collection<T> является базовая коллекция Microsoft

Так что это образец, чтобы объяснить, что происходит:

// get parent node called "ParentNode" result is not null 
var parentNode = treeview1.Nodes[0]; 

// get quantity of nodes result is 2 
var qtyNodes = parentNode.Nodes.Count; 

// try removing the first node : this calls Collection<T>.RemoveAt(T); 
parentNode.Nodes.RemoveAt(0); 

// here count is still 2 

// removing the tag from the node which contain model informations 
parentNode.Nodes[0].Tag = null; 

// try removing the first node again 
parentNode.Nodes.RemoveAt(0); 

// now the count is 1 so the item really got removed 

Что тег должен делать с Collection.RemoveAt()? Также у меня есть другой случай, когда удаление тега из узла также не работает. Итак, какие другие свойства объекта могут привести к ошибке Collection.RemoveAt?

* Редактировать * Я просто заменить все RadTreeView (Telerik TreeView) и RadTreeNode (Telerik TreeNode) по стандарту Microsoft TreeView и TreeNode и код работает нормально, так что это не Tag свойство, которое является проблематичным.

+1

[документация] (http://docs.telerik.com/devtools/winforms/api/html/t_telerik_collections_generic_notifycollection_1.htm) из «NotifyCollection» показывает, что он не раскрывает свой собственный «RemoveAt». Но он предоставляет метод «RemoveItem» на основе индекса. Что произойдет, если вы заменили вызовы на 'Collection .RemoveAt' по вызову' NotifyCollection .RemoveItem'? Не обижайтесь на Telerik, но, возможно, это просто не выполняется последовательно. – dlatikay

+0

'RemoveItem()' deos не существует для объекта. Лучше всего у меня есть «Удалить (Node)» и «Удалить (String objectname)», и оба они не работают. – Franck

+0

@Franck вы уверены, что используете RadTreeNodeCollection? Потому что согласно [документации] (http://docs.telerik.com/devtools/winforms/api/html/m_telerik_wincontrols_ui_radtreenodecollection_removeitem.htm) есть один. –

ответ

0

Исправлена ​​проблема, изменив RadTreeview в TreeView и все ссылки на RadTreeNode к TreeNode и все это прекрасно работает с тем же самым кодом.