TreeView

giovedì 13 dicembre 2007 - 15.47

Anubis Profilo | Junior Member

ciao a tutti...

devo fare selezionare a un TreeView il nodo ke ha come proprietà .Name un determinato valore(codePrefix)... per farlo scorro i nodi del TreeView, usando qst codice...

int nodi = PlannedMaintenance_MainTreeView.Nodes.Count;
for (i = 0; i < nodi;i++ )
{
if (PlannedMaintenance_MainTreeView.Nodes[i].Text == codePrefix)
{
PlannedMaintenance_MainTreeView.SelectedNode = PlannedMaintenance_MainTreeView.Nodes[i];
}
}

il problema è ke si ferma al nodo principale, e non scorre i 3 sottonodi presenti...

potete aiutarmi x favore??

Wamba Profilo | Expert

>
>int nodi = PlannedMaintenance_MainTreeView.Nodes.Count;
>for (i = 0; i < nodi;i++ )
> {
>if (PlannedMaintenance_MainTreeView.Nodes[i].Text == codePrefix)
> {
>PlannedMaintenance_MainTreeView.SelectedNode = PlannedMaintenance_MainTreeView.Nodes[i];
> }
> }
>

Ciao,
Purtroppo ora non ho il tempo di scriverti il codice cerco di spiegartelo brevemente:
PlannedMaintenance_MainTreeView contiene solamente il nodo root i nodi figli di root li trovi sotto root.Nodes (o simile) e così via.
Non ti basta scrivere un loop ma devi fare una funzione ricorsiva per tutto l'albero.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
blogs.dotnethell.it/Wamblog/

Anubis Profilo | Junior Member

non saprei proprio come fare qst funzione ricorsiva...

Wamba Profilo | Expert

te la scrivo in meta linguaggio:

function AnalizzaNodi(ValoreDaTrovare, NodoCorrente)
{
//Controllo il nodo corrente
if(QuestoNodo.Prpdacercare == ValoreDaTrovare){return NodoCorrente;}

//Non è il nodo corrente provo con i figli
var NodoTrovato;
for (x = 0; x < NodoCorrente.Nodes.lenght; x++)
{
NodoTrovato = AnalizzaNodi(ValoreDaTrovare, NodoCorrente.Nodes[x];
if(NodoTrovato != null){return NodoTrovato;} //Era un figlio lo restituisco
}

return nothing //Non era in questo ramo restiotuisco nothing
}
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
blogs.dotnethell.it/Wamblog/

Anubis Profilo | Junior Member

ho provato con questa funzione ricorsiva, ma sembra ke l'applicazione entri in un loop infinito...
io la prima volta la funzione ricorsiva la rikiamo così:

PlannedMaintenance_MainTreeView.SelectedNode = AnalizzaNodi(CodePrefix, PlannedMaintenance_MainTreeView.TopNode);

dato ke devo far selezionare all'albero il nodo ke ha come nome un certo valore...
è giusto rikiamarla la prima volta in questo modo o devo fare diversamente??

cmq il codice della mia funzione ricorsiva è il seguente...

public TreeNode AnalizzaNodi(string valore, TreeNode nodoCorrente)
{
//Controllo il nodo corrente
if(nodoCorrente.Name == valore){return nodoCorrente;}

//Non è il nodo corrente provo con i figli
TreeNode nodoTrovato = new TreeNode();
int x;
for (x = 0; x < nodoCorrente.Nodes.Count; x++)
{
nodoTrovato = AnalizzaNodi(valore, nodoCorrente.Nodes[x]);
if(nodoTrovato != null){return nodoTrovato;} //Era un figlio lo restituisco
}
return null; //Non era in questo ramo restiotuisco nothing
}
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5