Popolamento dinamico di un Tree

martedì 17 novembre 2009 - 16.55

Franto Profilo | Junior Member

Ciao a tutti, spero di essere il più preciso possibile nel descrivere il mio problema.
Ho una tabella (MENUITEM) con questi dati:

ID__________ITEMSDETITOL_______________ITEMSIDCHILD
1_____________Acquisti____________________[i]Null[/i]
2_____________Vendite_____________________[i]Null[/i]
3__________Anagrafica clienti__________________2
4__________Anagrafica fornitori________________1

Praticamente il campo ITEMSIDCHILD, mi indica se si tratta di un nodo root (Null) o a quale nodo root appartiene.
Ora, come posso costruire la struttura del mio Tree una volta estratti i dati?
Grazie.

--------------------------------------------------------------
Il destino è solo una giustificazione a ciò che è accaduto, che accade e che accadrà. Apriamo gli occhi e riprendiamoci la nostra vita.

AntCiar Profilo | Expert

Ciao.

Ti ho allegato un progetto di esempio che fa al caso tuo.

Ciao

Cristian Barca

Franto Profilo | Junior Member

Perfetto.
Grazie

Ciao


--------------------------------------------------------------
Il destino è solo una giustificazione a ciò che è accaduto, che accade e che accadrà. Apriamo gli occhi e riprendiamoci la nostra vita.

Franto Profilo | Junior Member

Ciao, ho visto il progettino e mi è stato molto utile x capire il meccanismo..un'ultima domanda.
Una volta terminato il popolamento del Tree, per ogni nodo "child" mi dovrebbe partire un programma..
Avevo pensato di testare il .Text al dopprio click sul nodo, ma questo non mi eviterebbe il dover intervenire sul codice ogni volta che inserisco un nuovo programma..
Un'altra idea era quella di inserire un nuovo campo nella mia tabella MENUITEM dove vado a mettere il nome della form da attivare, ma dopo non saprei come gestire la conversione da "stringa" a "form"...

Hai delle idee migliori per evitare di modificare da codice il programma?

Grazie


--------------------------------------------------------------
Il destino è solo una giustificazione a ciò che è accaduto, che accade e che accadrà. Apriamo gli occhi e riprendiamoci la nostra vita.

AntCiar Profilo | Expert

Ciao. ti ho riallegato il programma di esempio.

Praticamente ho ricreato la classe "treeNode" e gli ho aggiunto come proprietà il percorso del programma da eseguire.
Nel caso in cui però non è un programma esterno da aprire ma form diverse della stessa applicazione, si dovrebbe usare la reflection per instanziare form a partire dal loro nome ma non l'ho mai fatto.

Un accrrocco veloce è quello di scrivere nella proprietà che ti ho aggiunto (ne puoi creare anche tu di altre di qualsiasi tipo) il nome della form da aprire e nell'evento del doppio click sul nodo controllare il nome associato al nodo e instanziare di conseguenza la form. Non è un ottimo approccio ma funziona.

ciao ciao


Cristian Barca

Franto Profilo | Junior Member

Ciao, sono riuscito a usare la Reflection.
Vi posto il codice.
Io per la lettura da db uso l'ORM lightspeed, ma va benissimo anche con una classica lettura da datatable..

using System.Reflection;
...
...
...

private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
using (ModelUnitOfWork uow = Repository.Context.CreateUnitOfWork())
{
IList<Menuitem> vMenuitem = uow.Find<Menuitem>(Entity.Attribute("ITEMSDEPATH") == e.Node.FullPath.ToString());
if (vMenuitem[0].Itemsidchild == null)
{
return;
}

try
{
Assembly vAssembly = Assembly.GetExecutingAssembly();
Form vForm = vAssembly.CreateInstance(vMenuitem[0].Itemsdeform) as Form;
vForm.ShowDialog();
}
catch (System.NullReferenceException exNull)
{
MessageBox.Show("Nessun programma associato alla voce di menu", "Programma non trovato");

System.Diagnostics.Trace.WriteLine("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-" +
Environment.NewLine + "Project Load" +
Environment.NewLine + exNull.ToString());
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
uow.Dispose();
}
}

E anche la fonte da cui ho preso "ispirazione" ..
http://www.csharphelp.com/archives4/archive604.html

Il tuo programma mi verrà comunque utile per agganciare programmi esterni!
Grazie ancora per l'aiuto!!

Ciao


--------------------------------------------------------------
Il destino è solo una giustificazione a ciò che è accaduto, che accade e che accadrà. Apriamo gli occhi e riprendiamoci la nostra vita.
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