Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    66

    [C#] Creare tree da database

    Salve,
    ho un database con una query che mi estra una tabella contenente dei campi tra i quali key, title, father. il campo father contiene la key del padre, e il padre avrà father uguale a 0.
    Detto questo devo creare un tree secondo questa logica...
    Spero di essermi espresso bene ^^

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Un tree di che tipo? Parliamo di una struttura dati? Oppure del controllo visuale?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    se non ho capito male i padri non possono essere figli a loro volta, se è cosi le cose si semplificano parecchio.
    La tua struttura dati è una lista di oggetti persona che sono i padri che oltre ai connotati ha anche una proprieta elenco figli List<Persona>.

    codice:
    public class Persona {
      public int ID {get;set;}
      public string Nome {get;set;}
      //altre props
      public List<Persona> Figli {get;set}
    
      public Persona()
      {
        Figli = new List<Persona>();
      }
    }
    codice:
    public List<Persona> GeneraAlbero()
    {
      public List<Persona> albero = new List<Persona>();
    
      //Seleziona dal DB tutti i padri (quelli con id=0)
      //Aggiungi i padri alla lista albero
      foreach(Persona padre in albero)
      {
          // seleziona tutte le persone dal db che hanno come idPadre l'id di padre
          //Aggiungi i figli selezionati alla lista padre.Figli
      }
    
      return albero;
    }
    Se invece i padri possono a loro volta essere figli la funzione generaAlbero la devi fare ricorsiva, gli devi passare l'id del padre (0 quando la chiami per la prima volta) e poi richiamarla dentro il foreach.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    66
    Controllo visuale...

    EDIT: per rsdpzed
    Non potresi essere un po' più specifico? soo alle prime armi con database e c#

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da bolzi89
    Controllo visuale...
    Ok, allora ti chiedo se hai trovato il controllo visuale che ti rappresenta una gerarchia ad albero; se sì, ti chiedo se hai provato a studiarne i metodi e le proprietà disponibili; se sì, ti chiedo quali sono i dubbi che hai in merito; se ce ne sono, ti chiedo quali sono, altrimenti ti chiedo se hai tentato di creare gli elementi che hai chiesto; se sì, ti chiedo quali sono le difficoltà che hai incontrato.

    Per farla breve, qui non si sviluppa su commessa, e si da una mano a risolvere difficoltà, purché questa non sia riconducibile al fare il lavoro al posto tuo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    66
    Io volevo delucidazioni sul come fare, non che me lo faceste voi, ecco parte del mio codice:

    codice:
    protected void Page_Load(object sender, EventArgs e)
        {
            ActionPlanList apList = new ActionPlanList();
            DataSet ds;
            ds = (DataSet)apList.listTree(85036);
            DataTable dt = ds.Tables[ds.Tables[0].TableName];
    
            foreach (DataRow dr in dt.Rows)
            {
    
                Ext.Net.TreePanel tree = new Ext.Net.TreePanel();
    
                tree.Title = "Progetti";
                tree.RootVisible = false;
    
                Ext.Net.TreeNode root = new Ext.Net.TreeNode();
                root.NodeID = dr["KEY"].ToString();
    
                tree.Root.Add(root);
    
                Ext.Net.TreeNode node1 = new Ext.Net.TreeNode();
    
                node1.Text = dr["TITLE"].ToString();
                node1.Expanded = true;
                
                if (Convert.ToBoolean(dr["FATHER"] = dr["KEY"]))
                {
                    Ext.Net.TreeNode tn = new Ext.Net.TreeNode();
                    tn.Text = dr["TITLE"].ToString();
                    node1.Nodes.Add(tn);
                }
                
                    //Prima era così:
                    //node1.Nodes.Add(new Ext.Net.TreeNode(dfather["TITLE"].ToString()));
                
                root.Nodes.Add(node1);
    
                Ext.Net.Panel panel1 = new Ext.Net.Panel("Settings");
                Ext.Net.Panel panel2 = new Ext.Net.Panel("Even More Stuff");
                Ext.Net.Panel panel3 = new Ext.Net.Panel("My Stuff");
    
                Ext.Net.Toolbar toolbar = new Ext.Net.Toolbar();
    
                Ext.Net.Button button1 = new Ext.Net.Button();
    
                Ext.Net.ToolTip tooltip = new Ext.Net.ToolTip();
                tooltip.Title = "Rich ToolTips";
                tooltip.Html = "Let your users know what they can do!";
    
                button1.ToolTips.Add(tooltip);
    
                Ext.Net.Button button2 = new Ext.Net.Button();
    
    
                Ext.Net.Button button3 = new Ext.Net.Button();
    
    
                toolbar.Items.Add(button1);
                toolbar.Items.Add(button2);
                toolbar.Items.Add(button3);
    
    
                Ext.Net.Window window = new Ext.Net.Window();
    
                window.Title = "Accordion Window";
                window.Width = Unit.Pixel(250);
                window.Height = Unit.Pixel(400);
                window.Maximizable = true;
                window.BodyBorder = false;
                window.Layout = "Accordion";
    
                window.TopBar.Add(toolbar);
    
                window.Items.Add(tree);
                window.Items.Add(panel1);
                window.Items.Add(panel2);
                window.Items.Add(panel3);
    
                this.PlaceHolder3.Controls.Add(window);
            }
    l'albero esce, ma non riesco a trovare il modo di visualizzare i figli nel nodo padre...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.