Pregunta

Tengo una Radtreeview y muchos nodos en este TreeView. Lo que quiero hacer es, cuando un nodo hizo clic, quiero obtener el nodo principal principal. ¿Cómo puedo hacer esto? La estructura es así:

  1. Padre
    1. Niño
      3. Child's Child
      4. Nodo seleccionado
      3. Child's Child
      3. Child's Child

Cuando selecciono el "Nodo 4. Seleccionado", quiero poder obtener el nodo principal no llamando al método tres veces.

¿Fue útil?

Solución

private void radTreeView_SelectionChanged( object sender, Telerik.Windows.Controls.SelectionChangedEventArgs e )
{
   // Get a reference to the treeview
   Telerik.Windows.Controls.RadTreeView treeView = sender as Telerik.Windows.Controls.RadTreeView;
   // Get the currently selected items
   ObservableCollection<Object> selectedItems = treeView.SelectedItems;
   RadTreeViewItem item = selectedItems[ 0 ] as RadTreeViewItem;
   // Get the previous item and the previous sibling item
   RadTreeViewItem previousItem = item.PreviousItem;
   RadTreeViewItem previousSiblingItem = item.PreviousSiblingItem;

   // Get the next item and the next sibling item
   RadTreeViewItem nextItem = item.NextItem;
   RadTreeViewItem nextSiblingItem = item.NextSiblingItem;

   // Get the parent item and the root item
   RadTreeViewItem parentItem = item.ParentItem;
   RadTreeViewItem rootItem = item.RootItem;
}

Principalmente la última línea de todo este evento sería lo que necesita, creo, se puede encontrar más información al respecto. aquí. Sin embargo, esta es para la versión WPF de RadTreeView.

Otros consejos

Acabo de escribir este método para ti, ya que ahora estoy trabajando en un gran proyecto con controles RAD:

public void FindFather(RadTreeNode n)
        {

            foreach (RadTreeNode node in RadTreeView1.GetAllNodes())
            {
                if (node.Level == 0 && !node.GetAllNodes().Contains(node))
                {
                    //this is the node that your looking for 
                    //do something with it
                    Console.Write("this is the Top Parent");
                }
            }


         }

Espero que te guste hermano, nunca te rindas al codificar

@King A.Majid: No creo que tu lógica sea correcta. ¿Qué pasa con el parámetro "RadTreeNode N"?

Mi método es simplemente simple de la siguiente manera:

public RadTreeNode CwGetTreeNodeTopParent(RadTreeNode nodeToFindTopParent)
            {
            var parentNode = nodeToFindTopParent.ParentNode;
            if (parentNode.Level == 0)
                return parentNode;
            parentNode = CwGetTreeNodeTopParent(parentNode);
            return parentNode;
            }

Debe verificar el nodo (que es encontrar el padre superior) para asegurarse de que no sea el nivel más alto.

Por ejemplo, queremos encontrar el padre superior para SelectedNode:

if(selectedNode.Level != 0)
{
var topParent = CwGetTreeNodeTopParent(selectedNode);
//To do something here.
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top