Ciao ragazzi, mi chiedevo se è possibile associare un controllo TreeView ad un database e come farlo...

grazie!

Creazione Siti Vicenza
Posizionamento Siti - SEO
267 messaggi dal 29 settembre 2009
            if(!Page.IsPostBack)
            {
                TreeNode Root = new TreeNode { Text = "Root", PopulateOnDemand = false };
                TreeNode Group1 = new TreeNode { Text = "Group1", PopulateOnDemand = false };
                Group1.ChildNodes.Add(new TreeNode { Text = "Nodo1", Value = "valoreNodo1" });
                Group1.ChildNodes.Add(new TreeNode { Text = "Nodo2", Value = "valoreNodo2" });
                Group1.ChildNodes.Add(new TreeNode { Text = "Nodo3", Value = "valoreNodo3" });

                TreeNode Group2 = new TreeNode { Text = "Group2", PopulateOnDemand = false };
                Group2.ChildNodes.Add(new TreeNode { Text = "Nodo4", Value = "valoreNodo4" });
                Group2.ChildNodes.Add(new TreeNode { Text = "Nodo5", Value = "valoreNodo5" });
                Group2.ChildNodes.Add(new TreeNode { Text = "Nodo6", Value = "valoreNodo6" });

                Root.ChildNodes.Add(Group1);
                Root.ChildNodes.Add(Group2);

                TreeView1.Nodes.Add(Root);
                TreeView1.ExpandDepth = 1;//Espandi Root
            }


Cosi puoi caricare da codice dei nodi in una treeview aggiungeno semplicemente il prelievo dei dati da db. un collegamento diretto penso che nn si possa fare a meno che non usi file xml al posto del db.

c
Ciao e grazie mille per la risp!

Domani lo provo e...speriamo in bene!

Creazione Siti Vicenza
Posizionamento Siti - SEO
Ciao Claudio, prendendo spunto dal tuo suggerimento, sono arrivato a modificarlo leggermente (mi generava errore) consultando anche su msdn (ma sono comunque partito da te!) ottenendo già un ottimo risultato:

nel pageLoad del file .cs:
        // ********** Inizio della gestione del TreeView:  ******************** // 
        if (!Page.IsPostBack) 
        { 
            //Creo la Root principale dell'albero: 
            TreeNode Root = new TreeNode(); 
            Root.Text = "Elenco Cataloghi Presenti (pdf)"; 
            Root.PopulateOnDemand = false; 
 
 
            //memorizzo nel dataset le info prelevate dalla tabella destinazioni: 
            DataSet ResultSet = RunQuery("SELECT * FROM destinazioni"); 
            DataSet ResultSet2 = RunQuery("SELECT * FROM cataloghi"); 
 
            // Creo i livelli per i nodi padri: 
            if (ResultSet.Tables.Count > 0) 
            { 
                // Per ogni record creo un nodo padre nel treeview: 
                foreach (DataRow row in ResultSet.Tables[0].Rows) 
                { 
 
 
                    if (!Page.IsPostBack) 
                    { 
 
                        //Creo il primo gruppo di nodi: 
                        TreeNode Group1 = new TreeNode(); 
                        Group1.Text = row["NomeDestinazione"].ToString(); 
                        Group1.Value = row["id_destinazione"].ToString(); 
                        Group1.PopulateOnDemand = false; 
 
                        // Creo i livelli per i nodi figli: 
                        if (ResultSet2.Tables.Count > 0) 
                        { 
                            // Per ogni record creo un nodo figlio nel treeview: 
                            foreach (DataRow row2 in ResultSet2.Tables[0].Rows) 
                            { 
                                //Creo i nodi figli: 
                                TreeNode Group2 = new TreeNode(); 
                                Group2.Text = row2["NomeCatalogo"].ToString(); 
                                Group2.Value = row2["PercorsoFile"].ToString(); 
                                Group2.PopulateOnDemand = true; 
                                Group1.ChildNodes.Add(Group2); 
                            } 
 
                            Root.ChildNodes.Add(Group1); 
 
                        } 
                    } 
 
                    //con.Close(); 
                } 
 
                //Root.ChildNodes.Add(Group2); 
                //Group1.ChildNodes.Add(Group1b); 
 
                TreeView1.Nodes.Add(Root); 
                TreeView1.ExpandDepth = 1;//Espandi Root  
            } 
        }


Come vedi ho usato (sempre prendendo di esempio qualche suggerimento da msdn) un collegamento tra il treeView ed il DB da codice, con un dataset ed un resultset. Alla fine sono riuscito a popolare tutti i nodi padre e i nodi figli...ma...c'è un ma!

I nodi figli riesco a popolarli solo con tutti i dati presenti nella seconda tabella del Db, mentre mi dovrebbe popolare per ogni nodo padre i corrispondenti nodi figli. So che sono poco chiaro, allora cerco di spiegrami meglio:

1) Ho il database con due tabelle relazionate tra loro, con una relazione di tipo uno a molti (e qui non credo di avere dei problemi in quanto l'ho testato prima)

2) Ho il treeView che nei nodi padri legge la prima tabella del Db.

3) Sempre nel TreeView viene letta la seconda tabella del Db e popolati i nodi figli associandoli pero al rispettivo nodo padre (prima tabella)

Ma questo non succede, è come se non venisse filtrata la relazione... essendomi dilungato una cifra arrivo al dunque: Come posso fare per "filtrare" le relazioni?


Grazie mille!
Modificato da ricardo78 il 27 marzo 2010 11.59 -

Creazione Siti Vicenza
Posizionamento Siti - SEO
267 messaggi dal 29 settembre 2009
Il problema è che una delle due quary è sbagliata, cioè se nella relazione uno a molti e l'uno sta su tblDestinazioni allora devi fare una query del tipo
SELECT * FROM Categoria Where idDestinazione=[tuoValore]

questa query la devi eseguire dentro il primo foreach e tuoValore lo prendi iterando sulla prima quary che esegui.
Allora ho fatto cosi:
...

            //memorizzo nel dataset le info prelevate dalla tabella destinazioni:
            DataSet ResultSet = RunQuery("SELECT * FROM destinazioni");
            DataSet ResultSet2 = RunQuery("SELECT * FROM cataloghi WHERE id_destinazione = [id_destinazione]");
...


Dove "id_detinazione" è la chiave primaria della prima tbl (Destinazioni) e "id_destinazioni" è il record della seconda tbl (cataloghi) questi due sono anche i record interessati nella relazione...

il risultato però non cambia, mi viene anche il dubbio che non ho capito questo tuo ultimo suggerimento

Creazione Siti Vicenza
Posizionamento Siti - SEO
267 messaggi dal 29 settembre 2009
provo ad inserire il codice da modificare in quello che hai postato tu

           if (!Page.IsPostBack)
            {
                //Creo la Root principale dell'albero: 
                TreeNode Root = new TreeNode();
                Root.Text = "Elenco Cataloghi Presenti (pdf)";
                Root.PopulateOnDemand = false;


                DataSet ResultSet = RunQuery("SELECT * FROM destinazioni");

                // Creo i livelli per i nodi padri: 
                if (ResultSet.Tables.Count > 0)
                {
                    // Per ogni record creo un nodo padre nel treeview: 
                    foreach (DataRow row in ResultSet.Tables[0].Rows)
                    {

                        DataSet ResultSet2 = RunQuery("SELECT * FROM cataloghi WHERE id_destinazione = " + row["id_destinazione"].ToString()); /* Modifica */
                        //Creo il primo gruppo di nodi: 
                        TreeNode Group1 = new TreeNode();
                        Group1.Text = row["NomeDestinazione"].ToString();
                        Group1.Value = row["id_destinazione"].ToString();
                        Group1.PopulateOnDemand = false;
                        // Creo i livelli per i nodi figli: 
                        if (ResultSet2.Tables.Count > 0)
                        {
                            // Per ogni record creo un nodo figlio nel treeview: 
                            foreach (DataRow row2 in ResultSet2.Tables[0].Rows)
                            {
                                //Creo i nodi figli: 
                                TreeNode Group2 = new TreeNode();
                                Group2.Text = row2["NomeCatalogo"].ToString();
                                Group2.Value = row2["PercorsoFile"].ToString();
                                Group2.PopulateOnDemand = true;
                                Group1.ChildNodes.Add(Group2);
                            }

                            Root.ChildNodes.Add(Group1);

                        }
                    }

                    //con.Close(); 
                }

                TreeView1.Nodes.Add(Root);
                TreeView1.ExpandDepth = 1;//Espandi Root 
            }
 

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.