//-----------------------------------------------------------------------
        private void GetSelectedFields(ArrayList lst, TreeNodeCollection nodes, CInfoChampDynamique defParent)
        {
            foreach (TreeNode node in nodes)
            {
                CInfoChampDynamique defProp = null;
                if (node.Tag is CInfoChampDynamique)
                {
                    defProp = (CInfoChampDynamique)node.Tag;
                    defProp = defProp.Clone();
                    if (defParent != null)
                    {
                        defProp.InsereParent(defParent);
                    }
                }
                else if (node.Tag == null)                  //C'est un folder
                {
                    defProp = defParent;
                }
                if (node.Checked && defProp != null && m_tableSelectionnes[defProp.NomPropriete] == null)
                {
                    lst.Add(defProp);
                }
                else if (!node.Checked && defProp != null)
                {
                    //Elle a été décochée !!!
                    m_listeDecoches.Add(defProp);
                }

                GetSelectedFields(lst, node.Nodes, defProp);
            }
        }
 private void m_arbre_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
 {
     if (e.Node.Parent == null || !(e.Node.Parent.Tag is CInfoChampDynamique))
     {
         m_lblTable.Text = m_structurePrincipale.NomConvivial;
     }
     else
     {
         m_lblTable.Text = ((CInfoChampDynamique)e.Node.Parent.Tag).NomPropriete;
     }
     if (e.Node != null && e.Node.Tag is CInfoChampDynamique)
     {
         m_champSel = e.Node.Tag as CInfoChampDynamique;
         TreeNode node = e.Node.Parent;
         while (node != null)
         {
             CInfoChampDynamique champParent = node.Tag as CInfoChampDynamique;
             if (champParent != null)
             {
                 m_champSel.InsereParent(champParent);
             }
             node = node.Parent;
         }
     }
 }
        //-----------------------------------------------------------------------
        private void FillTree(CInfoStructureDynamique structure, TreeNodeCollection nodes, CInfoChampDynamique defParente)
        {
            ArrayList lst = new ArrayList( );

            lst.AddRange(structure.Champs);
            lst.Sort(new DefSorter());

            //Trouve les catégories
            Hashtable tableCategories = new Hashtable();

            foreach (CInfoChampDynamique info in lst)
            {
                if (info.Rubrique != "" && ShouldHadChamp(info))
                {
                    if (tableCategories[info.Rubrique] == null)
                    {
                        TreeNode node = new TreeNode(info.Rubrique);
                        node.ImageIndex         = 0;
                        node.SelectedImageIndex = 0;
                        nodes.Add(node);
                        tableCategories[info.Rubrique] = node;
                    }
                }
            }
            foreach (CInfoChampDynamique info in lst)
            {
                if (ShouldHadChamp(info))
                {
                    TreeNode node = new TreeNode(info.NomChamp);
                    node.ImageIndex         = info.StructureValeur != null?1:2;
                    node.SelectedImageIndex = node.ImageIndex;
                    TreeNodeCollection nodesParents = nodes;
                    if (info.Rubrique != "")
                    {
                        TreeNode nodeParent = (TreeNode)tableCategories[info.Rubrique];
                        if (nodeParent != null)
                        {
                            nodesParents = nodeParent.Nodes;
                        }
                    }
                    node.Tag = info;
                    nodesParents.Add(node);
                    if (info.StructureValeur != null && ShouldHasFils(info))
                    {
                        node.Nodes.Add("*");
                    }
                    CInfoChampDynamique newInfo = info.Clone();
                    if (defParente != null)
                    {
                        newInfo.InsereParent(defParente);
                    }
                    if (m_tableSelectionnes[newInfo.NomPropriete] != null)
                    {
                        node.Checked = true;
                    }
                }
            }
        }