none
message d'erreur avec DataPager (c#) RRS feed

  • Question

  • Bonjour,

    J'ai un " Generic List<type>", dedans je mets les informations et je les affiche par la "classe PlaceHolder".

    Lorsqu'il y a trop d'articles (par exemple 60) dans cette liste, l'affichage est trop lent parce que l'on affiche tous les articles...

    exemple :

     

    //dans Code Behind
    	//...
    	List<ArticleStruct> myListeArticle = new List<ArticleStruct>();
    	int i = 1;
    	PlaceHolder1.Controls.Add(new LiteralControl("<table id = resultat>"));
    	
    	
    	//...
    	 PlaceHolder1.Controls.Add(new LiteralControl("<tr>"));
    
    	
    	PlaceHolder1.Controls.Add(new LiteralControl("<td>"));
    	Label articlesItemsIdLabel = new Label();
    	articlesItemsIdLabel.ID = "articlesItemsIdLabel" + i.ToString();
    	articlesItemsIdLabel.Text = articlesItems.Id.ToString();
    	PlaceHolder1.Controls.Add(articlesItemsIdLabel);
    	PlaceHolder1.Controls.Add(new LiteralControl("</td>"));
    	//...
    	
    	
    	// dans aspx principal
    
    
    	<%-- ... --%>
    	<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
    	<%-- ... --%>
    

     

    Pour ne pas afficher tous les articles dans le même écran, je vais faire la pagination...
    alors, j'ai voulu utiliser le class, "DataPager" en limitant 7 articles par écran alors j'ai ajouté dans mon code aspx principal les lignes suivantes dans mon conteneur "placeHolder" :

     

    	<asp:PlaceHolder ID="PlaceHolder1" runat="server">
    		<asp:PlaceHolder ID="PlaceHolder1" runat="server">
    			<asp:DataPager ID="ArticleDataPager" runat="server" PageSize="7">
    				<Fields>
    					<asp:NumericPagerField ButtonCount="5" />
    				</Fields>
    			</asp:DataPager>
    		</asp:PlaceHolder>
    	</asp:PlaceHolder>
    
    j'ai des messages  d'erreur :

    Sur le serveur Web,
    Windows Server Web 2007, service pack 2
    Microsoft .NET Framework 3.5 SP1
    IIS 7.0

     

    • Parser Error Message: Unknown server tag 'asp:DataPager'.


    Que je dois faire ?

    les même fichiers ont un autre message d'erreur sur mon PC, localement :    
    Microsoft Visual Web Developer 2010
    Version installée : WD Express

    Version 10.0.30319.1 RTMRel
    Microsoft .NET Framework
    Version 4.0.30319 RTMRel


    voici le message d'erreur :

    • Message d'erreur du compilateur: CS0433: Le type 'ApplicationArtcile.IdentiteMenu' existe dans 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\articlesNews\d263ecc0\104cf474\App_Web_fpvyich4.dll' et dans 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\articlesNews\d263ecc0\104cf474\App_Web_02xqq2i3.dll'


    Que dois-je faire?

    Si je supprime 2e ddl, voici le message d'erreur :

    • IPageableItemContainer introuvable. Vérifiez que DataPager se trouve dans un IPageableItemContainer ou que PagedControlID a pour valeur l'ID de contrôle d'un IPageableItemContainer.



    Merci pour votre aide


     


    • Modifié aspkiddy lundi 7 novembre 2011 20:23
    • Déplacé Ciprian Duduiala mardi 8 novembre 2011 07:32 question d'ASP.NET (Origine :Visual C#)
    lundi 7 novembre 2011 20:22

Réponses

  • Le contrôle PlaceHolder stocke des contrôles serveur ajoutés de manière dynamique sur la page Web. Dans votre cas il est plus judicieux d'utiliser un contrôle qui affiche une liste de données. Vous pouvez utiliser le contrôle ListView par exemple, voici un tuto complet avec la pagination sur ce contrôle.
    aelassas.free.fr
    mardi 8 novembre 2011 17:16
    Auteur de réponse
  • Bonjour Patrice,

     

    Après tant heure de recherchée, j'ai trouvé mon erreur :

     

    Dans  mon contrôle ListView j'ai oublié les attribut "LayoutTemplate"... Je l'ai mis, je n'ai plus de ce message d'erreur sur le serveur local...

    Par contre pour le moment, mon formulaire ne marche pas encore parce que je n'ai pas pu terminer...

    Le lundi, je vais voir comment je peux faire la connexion entre ma liste et la service web...

     

    Je vais vous donner la suite...

     

    Bonne fin de semaine

     

    vendredi 11 novembre 2011 20:57
  • Effectivement. Le problème est que ce que l'on met directement sous la balise ListView correspond aux propriétés de ce ListView. Donc il faut effectivement le déplacer en dehors ou dans un "template" de façon à ce que cela soit un contrôle comme un autre...

    A+


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 11 novembre 2011 21:37
    Modérateur

Toutes les réponses

  • Bonjour,

    Le contrôle DataPager fournit la fonctionnalité de pagination pour les contrôles liés aux données qui implémentent l'interface IPageableItemContainer, telle que le contrôle ListView.

    Le contrôle PlaceHolder n'implémente pas cette interface. C'est donc normal que vous ne puissiez pas l'utiliser dans le PlaceHolder.

    Il faut que vous utilisiez un contrôle qui implémentent l'interface IPageableItemContainer, telle que le contrôle ListView. Vous avez un exemple de code dans la documentation MSDN.

    Cordialement,


    aelassas.free.fr
    mardi 8 novembre 2011 09:44
    Auteur de réponse
  • Bonjour,

    Merci pour vos explications...

    Puisque  je ne peux pas utiliser le class, "DataPager" avec class, placeHolder.
    Alors comment je peux paginer la class "placeHolder" ?
    Bonne journée
    mardi 8 novembre 2011 16:28
  • Le contrôle PlaceHolder stocke des contrôles serveur ajoutés de manière dynamique sur la page Web. Dans votre cas il est plus judicieux d'utiliser un contrôle qui affiche une liste de données. Vous pouvez utiliser le contrôle ListView par exemple, voici un tuto complet avec la pagination sur ce contrôle.
    aelassas.free.fr
    mardi 8 novembre 2011 17:16
    Auteur de réponse
  • Bonjour, Aspkiddy,

     

    Est-ce que vous avez testé la solution proposée ? Merci d’avance de tenir la communauté informée sur la suite de vos démarches.

     

    Cordialement,

     

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    jeudi 10 novembre 2011 07:08
  • Bonjour Ciprian,

    Je suis toujours sur cela pour voir comment je peux intégrer dans mon serviceWeb... J'ai la difficulté au niveau de connexion... Mais comme d'hab, lorsque je vais trouver la solution je vais vous donner la suite...

     

    Bonne journée

    jeudi 10 novembre 2011 14:33
  • Bonjour,

    J'ai essayé intégrer le code du tuto en adaptant dans mon contexte, mais je n'ai pas encore terminé...

    Par contre, j'ai différents messages d'erreur lorsque je visionne le fichier sur le serveur distant, sur le serveur local (localhost) et dans Microsoft Visual Web Developer 2010 WD Express


    voici sur le serveur distant :
    (Windows Server Web 2007, service pack 2
    Microsoft .NET Framework 3.5 SP1
    IIS 7.0)



    Parser Error Message: Unknown server tag 'asp:ListView'.

    Source Error:
    Line 192:                <asp:ListView ID="ListView1" runat="server" DataKeyNames="nameId"



    sur le serveur local (localhost)
    (IIS 7.5.7600.16385
    Windows 7 Professionnel)

    Message d'erreur de l'analyseur: Le type 'System.Web.UI.WebControls.ListView' ne possède pas de propriété publique appelée 'DataPager'.

    Ligne 197 :              <asp:DataPager ID="DataPager2" runat="server" QueryStringField="pageNum" >


    Dans

    Microsoft Visual Studio 2010
    Version 10.0.30319.1 RTMRel
    Microsoft .NET Framework
    Version 4.0.30319 RTMRel
    Version installée : WD Express


    L'élément 'DataPager' n'est pas un élément connu. Ceci peut se produire s'il existe une erreur de compilation dans le site Web ou si le fichier Web.Config est manquant

    Pourquoi, il y a ces messages ?

     

    Merci

    jeudi 10 novembre 2011 17:21
  • Bonjour,

    Est-ce que vos pools tournent bien sous le Framework .NET 3.5 ?

    Est-ce que votre projet tourne bien sous le Framework .NET 3.5 ?

    Cordialement,


    aelassas.free.fr
    jeudi 10 novembre 2011 17:44
    Auteur de réponse

  • Bonjour,

     

    En fait, localement avec Microsoft Visual Web Developer 2010 Express, "Microsoft .NET Framework Version 4.0.30319 RTMRel" a été installé.
    Dans IIS, je vois la version 4.0 (sous Pools d'applications)

    jeudi 10 novembre 2011 18:54
  • c'est drôle parce que l'exemple " ExtremeASPNET2008_03.exe"  ça marche localement sans erreur...
    vendredi 11 novembre 2011 13:31
  • Bonjour,

    Le DataPager semble avoir été mis dans le ListView. Il se mets au même niveau et la propriété PagedControlID indique à quel contrôle il s'applique. Voir http://msdn.microsoft.com/fr-fr/library/system.web.ui.webcontrols.datapager.aspx.

    Egalement le serveur n'est pas en .NET 4 ? Déjà quelle version de .NET 4 cible t'on ? Vérifier que la version voulue est bien sélectionnée dans les propriétés du projet. Pour simplifier essayons déjà de faire que cela marche localement et on verra ensuite pour le serveur distant...

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 11 novembre 2011 13:34
    Modérateur
  • Bonjour Patrice,

     

    Après tant heure de recherchée, j'ai trouvé mon erreur :

     

    Dans  mon contrôle ListView j'ai oublié les attribut "LayoutTemplate"... Je l'ai mis, je n'ai plus de ce message d'erreur sur le serveur local...

    Par contre pour le moment, mon formulaire ne marche pas encore parce que je n'ai pas pu terminer...

    Le lundi, je vais voir comment je peux faire la connexion entre ma liste et la service web...

     

    Je vais vous donner la suite...

     

    Bonne fin de semaine

     

    vendredi 11 novembre 2011 20:57
  • Effectivement. Le problème est que ce que l'on met directement sous la balise ListView correspond aux propriétés de ce ListView. Donc il faut effectivement le déplacer en dehors ou dans un "template" de façon à ce que cela soit un contrôle comme un autre...

    A+


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 11 novembre 2011 21:37
    Modérateur
  • Bonjour,

    Oui, j'ai essayé faire la connections avec mon webService mais je n'arrive pas... Dans le tuto, c'est avec une Basse de bonne en XML...

    j'ai créé ma liste  :

    <asp:ListView ID="ListView1" runat="server" DataKeyNames="idName DataSourceID="_ConnexionDataMonListSansAnnulation" EnableViewState="False"> 
    	
    	<LayoutTemplate>
    		<%-- contenu ... de mon layOut, etc....    --%>
    	</LayoutTemplate>
    	<%-- cetc....    --%>
    
    	</asp:ListView>    
     
     <%--Connexion data --%>
    	<asp:ObjectDataSource runat="server" ID="_ConnexionDataMonListSansAnnulation" SelectMethod="GetInscriptionNom" TypeName="ExcpMyHome.afficherGens.InscriptionEx.Inscription" />
    

    Mais je n'arrive pas la connexion. Voici le message d'erreur :

    Le type spécifié dans la propriété TypeName de ObjectDataSource '_ConnexionDataMonListSansAnnulation' est introuvable.

    Où je fais les bêtises ?

    Voici une partie de mon code behind :

    using System;
    using System.Data;
    using System.Collections;
    
    using System.Collections.Generic; // aussi // pour ...> Linq
    
    using System.ComponentModel;
    using System.Drawing;
    
    
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    
    
    using InscriptionEx;
    
    //.... etc
    
    namespace ExcpMyHome
    {
    	
    	public partial class afficherGens : System.Web.UI.Page
    	{
    		
    		//.... etc
    		//.... etc
    		//.... etc
    		
    		private void LoadLabels()
    		{
    			object signInPageState = Session["SignInPage"];
    			
    			//.... etc
    			
    			Inscription InscriptionEx = WebServiceFactory.CreateInstance().CreateInscriptionWebService();
    			InscriptionStruct[] monInscription = InscriptionEx.GetInscriptionNom(idName);
    
    			List<ConstructIdent> monListSansAnnulation = new List<ConstructIdent>();
    			int etatId;
    
    
    			int localisation;    //// Pour garder la position ou insérer l'élément en cours 
    			bool repere;     	//Un booléen (aura la valeur True lorsque l'élément est trouvé) ainsi on ne vais pas le re-traiter après la boucle foreach.
    
    
    			foreach (ConstructIdent inscription in monInscription)
    				{
    				etatId = inscription.BwetatId;
    
    				if (!etatId.Equals(3))
    				{
    				localisation = 0;
    				repere = false;   //affecté/ assignée false (rien trouvé)
    
    				foreach (ConstructIdent InsertInscription in monListSansAnnulation)  //La fonction Insert permet d'ajouter un élément donné à une liste dans une position précise (la variable localisation)  
    					{
    					if (inscription.BwetatId < InsertInscription.BwetatId)    //comparaison les valeurs du membre que l'on veut trie
    						{
    							monListSansAnnulation.Insert(localisation, inscription);
    							repere = true; //affecté/ assignée true (donc trouvé)
    							break;    // mettre un  break qui permet de quitter la boucle foreach parce que l'élément a été déjà inséré ]
    						}
    
    					localisation++;         //affectée/assignée à 1  donc il faut se déplacer pour insérer le prochain élément]
    					}
    
    				if (!repere)   // la variable repere est à True veut dire que l'élément actuel est plus grand que tous ceux qui se trouvent dans la liste monListSansAnnulation, alors il faut ajouter à la fin]          
    					{
    					monListSansAnnulation.Add(inscription);   //la fonction Add ajoute l'élément à la fin de la liste.
    					}
    				}
    			}
    
    			int i = 1;
    
    			tVisualiserPageState.Inscriptions = new ConstructIdent[monListSansAnnulation.Count];
    
    			foreach (ConstructIdent inscription in monListSansAnnulation)
    				{
    				etatId = inscription.BwEtatId;
    				string etats;
    
    				switch (etatId)
    					{
    					case 0:
    					etats = "Pas encore";
    					break;
    					case 1:
    					etats = "Actif";
    					break;
    					case 2:
    					etats = "Suspendu";
    					break;
    					case 3:
    					etats = "Annulé";
    					break;
    					case 4:
    					etats = "Expiré";
    					break;
    					default:
    					etats = "non identifié";
    					break;
    					}
    
    				}
    
           
    
    
    
            SavePageState(); 
    
    	
    		}
    		
    		//.... etc
    		//.... etc
    	}
    
    }
    
    

    Où je fais les bêtises ?






    mardi 15 novembre 2011 20:21
  • Le message indique normalement que le type ExcpMyHome.afficherGens.InscriptionEx.Inscription n'existe pas. Utiliser par exemple l'explorateur d'objet pour vérifier que ce type existe bien (et est accessible). Cela ne serait pas ExcpMyHome.afficherGens.InscriptionEx ?

    Le principe est que le contrôle ObjectDataSource va créer tout seul une instance de ce type et appeler la méthode indiquée (on dirait qu'il y a peut-être une confusion de votre part entre le type InscriptionEx et la variable Inscription ?).

    P.S. : quand on change de sujet il est sans doute préférable de créer une nouvelle question :
    - cette question est déjà "résolue" donc elle sera sans doute moins lue par ceux qui veulent aider
    - si qq a ce même souci, la 2ème partie sera moins facile à trouver, et qq intéressé par la première partie passera soudainement sur un sujet différent


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mercredi 16 novembre 2011 12:00
    Modérateur
  • Bonjour Patrice Scribe ,

    J'ai continué à écrire dans ce ticket parce que je n'ai pas encore réglé mon problème, mais puisque vous en dites ainsi je vais ouvrir un autre...
    Merci pour vos réflexions et bonne journée....
    vendredi 2 décembre 2011 19:21