¿Obtener el nodo principal del nodo seleccionado en Radtreeview?
-
14-10-2019 - |
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í:
- Padre
- Niño
3. Child's Child
4. Nodo seleccionado
3. Child's Child
3. Child's Child
- Niño
Cuando selecciono el "Nodo 4. Seleccionado", quiero poder obtener el nodo principal no llamando al método tres veces.
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.
}