Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LINQ : BINDER UN TREEVIEW AVEC UN IENUMERABLE : L'EXTENSION DE MÉTHODE TOHIERARCHICALENUMERABLE


Information sur la source

Catégorie :ASP.Net Source .NET ( DotNet ) Classé sous : linq, linqtosql, methodextension, treeview, ihierarchialenumerable Niveau : Expert Date de création : 23/07/2007 Date de mise à jour : 25/09/2007 17:28:09 Vu / téléchargé: 7 472 / 111

Note :
Aucune note

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note


Description

Il est fréquent d'avoir à binder un treeview/menu à partir d'une table de la base de données. Par exemple une table category définit comme ceci :

      - CategoryID int
      - ParentCategory int
      - Name nvarchar(255)

Dans ce cas, ASP.net ne propose pas de solution miracle, on a deux solutions : soit l'on rajoute manuellement les noeuds un à un dans le treeview / menu soit on utilise l'interface IHierarchialEnumerable que je vous est déjà présenté ici : http://www.aspfr.com/codes/interface-IHierarchicalEnumerable-bindez-vos-menu-treeview_43234.aspx

C#3 / .net 3.5, introduit la notion d'extension de méthode, ces méthodes particulières se greffent à l'instance d'un objet, on peut ainsi rajouter une méthode ToHierarchicalEnumerable à un type ou une interface particulière, par exemple l'interface IEnumerable<T>.

Ce code rajoute donc l'extension de méthode ToHierarchicalEnumerable à l'interface IEnumerable<T> ce qui permet de binder vos treeview en quelques lignes à partir du moment où vous travaillez avec un IEnumerable<T>. Cela tombe bien Linq To Sql renvoie des IEnumerable<T>. ;-)

Le code ci dessous est un exemple d'utilisation de cette extension de méthode. Le code interessant se trouve dans le zip.

Les arguments de la méthode sont des lambdas expressions qui retournent l'id courant, l'id du parent, le type du noeud, le path du noeud. Les deux derniers arguments se trouvent dans d'autres signatures.
 

Source

  • protected void Page_Load(object sender, EventArgs e)
  • {
  • var dc = new Data.AjaxLibraryDataContext();
  • var categories = from c in dc.Categories
  • orderby c.Name
  • select c;
  • tvCategories.DataSource = categories.ToHierarchicalEnumerable(cat => cat.CategoryID, cat => cat.parentCategoryID);
  • tvCategories.DataBind();
  • }
        protected void Page_Load(object sender, EventArgs e)
        {
            var dc = new Data.AjaxLibraryDataContext();

            var categories = from c in dc.Categories
                             orderby c.Name 
                             select c;

            tvCategories.DataSource = categories.ToHierarchicalEnumerable(cat => cat.CategoryID, cat => cat.parentCategoryID);
            tvCategories.DataBind();

        }

Conclusion

Je n'ai pas testé avec toutes les collections de IEnumerable<T>. Il se peut qu'il y ait des problèmes s'il y a des noeuds orphelins, ou des boucles au niveau des noeuds (le parent du noeud est aussi le fils de ce noeud).

Si vous tombez sur un bug, remontez le moi dans les commentaires, idems si vous améliorez le code, ou tout simplement si vous l'utilisez :-)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

25 septembre 2007 17:28:09 :
modification de catégorie pour test

Commentaires et avis

signaler à un administrateur
Commentaire de Magjjy le 30/10/2007 12:23:08

Salut,
en tant que débutante, j'ai ajouter la classe dans le app_code mais j'obtiens les erreurs ci-dessous.
Peux-tu détailler un peu plus la marche à suivre pour implémenter cette classe.

Merci de ta patience.

Liste des erreurs :

C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(27,88): erreur CS1031: Type attendu
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(27,129): erreur CS1002: ; attendu
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(27,138): erreur CS1519: Jeton ',' non valide dans la déclaration de membres de la classe, de la structure ou de l'interface
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(27,144): erreur CS1519: Jeton '>' non valide dans la déclaration de membres de la classe, de la structure ou de l'interface
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(27,158): erreur CS1519: Jeton ',' non valide dans la déclaration de membres de la classe, de la structure ou de l'interface
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(27,192): erreur CS1002: ; attendu
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(29,20): erreur CS1520: Une méthode de classe, de structure ou d'interface doit posséder un type de retour
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(29,53): erreur CS1001: Identificateur attendu
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(29,67): erreur CS1001: Identificateur attendu
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(29,80): erreur CS1001: Identificateur attendu
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(29,86): erreur CS1001: Identificateur attendu
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(29,87): erreur CS1525: Terme d'expression non valide '>'
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(29,89): erreur CS1026: ) attendue
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(29,101): erreur CS1519: Jeton ',' non valide dans la déclaration de membres de la classe, de la structure ou de l'interface
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(29,107): erreur CS1519: Jeton '=' non valide dans la déclaration de membres de la classe, de la structure ou de l'interface
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(29,122): erreur CS1519: Jeton ')' non valide dans la déclaration de membres de la classe, de la structure ou de l'interface
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(41,23): erreur CS1518: Class, delegate, enum, interface ou struct attendu
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(56,23): erreur CS1518: Class, delegate, enum, interface ou struct attendu
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(58,37): erreur CS1518: Class, delegate, enum, interface ou struct attendu
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(60,24): erreur CS1518: Class, delegate, enum, interface ou struct attendu
C:\Projets\Catalogue\Catalogue\App_Code\LinqHierarchicalExtension.cs(63,5): erreur CS1022: Définition de type ou d'espace de noms, ou fin de fichier attendue

signaler à un administrateur
Commentaire de jesusonline le 30/10/2007 12:33:22 administrateur CS

c'est du C#3.5 donc VS2008.

signaler à un administrateur
Commentaire de Magjjy le 30/10/2007 12:40:57

effectivement ... ca ne pouvait pas fonctionner !
Je cherche en fait à créer un treeview depuis une table catégorie (Indexe, libelle, idparent) ... avec VS2005.
Pourais-tu m'éguiller dans cette démarche que je suppose tu as déjà dû mettre en oeuvre ...
vu ton niveau de développement ASP.NET !!!

Merci de ton aide

signaler à un administrateur
Commentaire de jesusonline le 30/10/2007 12:58:54 administrateur CS

Renseigne toi sur les extensions de méthode, les lambda expression et tu verras que le code ici peut être utilisé ... suffit juste de le lire et de modifier une petite chose.

signaler à un administrateur
Commentaire de Magjjy le 30/10/2007 13:43:47

ok ... je vais voir
merci

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

question Linq to sql [ par ChamY ] Bonjour,Je bloque sur un truc surement bête et je recherche de l'aide surr du Linq To Sql.Donc j'ai une page avec un gridview qui liste mes taches et Bug webcontrol treeview [ par karim ] Bonjour a tous !J'utilise VS.Net version Beta 2.je crée une webform dans laquelle j'ajoute un treeview et un bouton(webcontrols). Je ne rajoute aucun Example de code pour faire un TreeView (DHTML) [ par Jimini ] Quelque'un a un code source simple pour faire un treeview en html comme dans l'explorateur de windows (avec les + et - pour explorer les sous répertoi Treeview- au secours !!! [ par Marti ] Salutje voudrais lire une table , et constituer ma treeview avec le resultat.j'ai recup du code pour la treeview en Javascript.et je n'arrive pas à co Treeview + asp [ par cbu ] Salut,qui aurait un exemple de page avec implémentation du TreeView livré avec Visual Studio ?D'avance merci probleme avec treeview [ par Minad ] Salut a tous,Je suis debutante en asp.netJe dois faire une arborescence à 5 niveaux à partir de 5 tables liées en Mysql et je m'arrache un peu les che TreeView dans une page WEb [ par ismo02 ] Salutdans le cadre de mon stage je dois mette en place un client internet de Web Services.Pour cela j'ai besoin de mettre en place un TreeViw dans une Treeview avec ASP.NET [ par shadowgirl ] Bonjour à tous, Je commence tout juste avec Dotnet et j'aimerais faire un treeview en ASP.NET mais je ne sais pas trop comment le faire.Si quelqu'un p Besoin d'aide pour un Treeview en ASP.NET [ par shadowgirl ] Salut à tous,J'aurais besoin d'aide, je commence à peine à coder en .NET et je voudrais faire un treeview en ASP.NET avec une base de données.Si quelq selection dans un treeview [ par rigi12 ] salutj'ai un probleme pour selectionner les fils de mon premier pere dans un arbre.j ai essaye avec la fonction selectednodeindex pour tous les 0.* ma


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,48 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.