begin process at 2012 02 05 01:28:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ASP.Net

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

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


 Information sur la source

Note :
Aucune note
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é :13 755 / 282

Auteur : jesusonline

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (8)
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-IHierarchical Enumerable-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

Les Membres Club peuvent 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

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) UTILISATION DE LA MÉTHODE SORT ET SORTDIRECTION AVEC UN GRID...
Source .NET (Dotnet) RESPONSE.FILTER : MANIPULATION DU STREAM DE SORTIE ASP.NET
Source avec Zip Source .NET (Dotnet) OPTIMISATION DE LA SERIALISATION JSON POUR LES LIST<T>
Source avec Zip Source .NET (Dotnet) CRAWLABLELINKBUTTON : UPDATEPANEL ET RÉFÉRENCEMENT
Source .NET (Dotnet) POSTBACKCONTROL - COMMUNICATION CLIENT/SERVEUR AVEC LES UPDA...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) GUESTBOOK AVEC GRIDVIEW par DanMor498
Source avec Zip CHECKED DROPDOWNLIST par fredzool
Source avec Zip Source avec une capture Source .NET (Dotnet) GRIDVIEW WITH TREEVIEW AND CALLBACK par fredzool
Source avec Zip APPELLER UN WEBSERVICE DEPUIS JAVASCRIPT par fredzool
Source avec Zip Source .NET (Dotnet) MONEY TEXTBOX WITH EMBEDED JAVASCRIPT par fredzool

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) GRIDVIEW WITH TREEVIEW AND CALLBACK par fredzool
Source avec Zip Source avec une capture Source .NET (Dotnet) GRIDVIEW UTILISANT LINQ ET REFLECTION par jmenfous
Source avec Zip Source .NET (Dotnet) OPTIMISATION DE LA SERIALISATION JSON POUR LES LIST<T> par jesusonline
Source avec Zip Source .NET (Dotnet) L'INTERFACE IHIERARCHICALENUMERABLE - BINDEZ VOS MENU/TREEVI... par jesusonline
Source avec Zip Source .NET (Dotnet) [ASP.NET 2.0] LE CONTRÔLE TREEVIEW par Netlink

Commentaires et avis

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

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

c'est du C#3.5 donc VS2008.

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

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.

Commentaire de Magjjy le 30/10/2007 13:43:47

ok ... je vais voir
merci

Commentaire de guilhemberthalon le 13/01/2009 18:45:47

Trop fort Jesus !
trop utile ton truc,
Bonne continuation

Commentaire de LordArthis le 30/03/2009 15:34:18

Merci Cyril.
C'est comme toujours de grande qualité.

Commentaire de artcava le 03/04/2009 00:35:51

Hi Jesus, I try in English...
I've this problem, my treeview is not rendered on the page...
Debugging I can see a lot of elements in _currentElements, but no one in _addedElements, that are 2 internal lists...

Any idea?

        protected void Page_Load(object sender, EventArgs e)
        {
            var dc = new FoldersDataContext();
            var folders = from f in dc.FOLDERs
                          orderby f.Position
                          select f;

            twFolders.DataSource = folders.ToHierarchicalEnumerable(folder => folder.FolderId, folder => folder.ParentId);
            twFolders.DataBind();
        }

 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 Treeview [ par thybang ] Bonjour, Je suis en train de créer une Treeview.Pour chacun de ses nodes, je voudrai ajouter une image qui me permettrai d'ajouter un élément fils.J'u MaintainScrollPositionOnPostBack ne marche pas ! [ par DxMachina ] Bonjour, J'aimerais sauvegarder la position du scrollbar vertical de mon Treeview lors des callBacks ajax, cette question a déjà été posée avec comme Treeview aux fonctions étendues [ par equinoxe83 ] Bonjour à tous,J'ai une base de données qui intègre 3 tables thème, article, couleur.J'arrive bien à remplir mon treeview avec les éléments en mode hi Programmer un Treeview [ par dorine82 ] Salut à tous,Je suis une debutante en asp.net et je voudrais votre aide par rapport à un Programme. En fait je dois editer un Treeview. Au depart sur linq - jointure de table [ par wally88 ] Bonjour,  je n'arrive pas a joindre mes tables ou a "trier" :'(exemple pour récupérer les lignes en rapport entre deux tables, je lui dis que la table treeview imagelist [ par momper ] Bonjour,Ci-dessous voici un code de microsoft trouvé à cette adresse : http://support.microsoft.com/kb/184975/EN-US/J'ai un problème sur mon propre tr Problème ItemDataBound, DataItem avec LINQ [ par walterskinner ] Bonjour, Cela fait maintenant deux jours que je cherche LinqToSql générique peupler une dropdownlist [ par sspizer ] Bonjour,Actuellement j'aimerais remplir une dropdownlist de facon générique:public void GetData(MydataContext c){   ...}Anciennement on passait en par erreur due à InsertAllOnSubmit() [ par khawlaaa ] Bonjour tout le monde , je suis entrain de travailler sur un WebSite ( asp.net et C#) j'ai divisé mon projet en 3 couches: *UI *BLL *DAO L


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,030 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales