2016-02-03 1 views
0

J'ai une liste d'objets qui ont été pris à partir d'une procédure stockée. Je prends ensuite cette liste pour la passer à travers une méthode que j'ai créée qui l'enveloppe en HTML et ensuite met en forme web.Liste générique des objets, passée à travers une classe d'écrivain de texte HTML pour produire le code HTML. Maintenant, en essayant d'implémenter la pagination

Je cherche à créer une pagination pour cette liste. J'ai stocké la liste dans une session et j'ai deux boutons (suivant et précédent) J'utilise LINQ pour sauter et prendre la forme de la liste à chaque clic de bouton.

Bouton Cliquez

protected void lnkNext_Click(object sender, EventArgs e) 
{ 
    ListOfAdvertAndUsers = (List<Advert_User>)Session["list"]; 

    var list = from item in ListOfAdvertAndUsers select item; 

    var pgNo = 1; 
    var pgRec = 6; 

    list = list.Skip(pgRec * pgNo).Take(pgRec).ToList(); 

    ListOfAdvertAndUsers = list.ToList(); 

    PopulateData(ListOfAdvertAndUsers); 
} 
+0

Quelle est la question? Je remarque que vous êtes en train de coder en dur le numéro de page et la taille dans le gestionnaire d'événements, donc cliquer sur "Suivant" ne fait vraiment rien. –

+0

Vous créez également des requêtes et des listes, en les écrasant et en ne stockant rien dans la session. Je pense que vous pouvez simplifier le code de manière significative et peut-être que votre problème deviendra plus apparent. –

+0

@DStanley - Que dois-je faire? Je suis à la recherche du bouton suivant pour retirer les éléments X de la liste, lorsque l'utilisation l'atteindra à nouveau, cela prendra un autre X éléments de la liste. – Con

Répondre

0

Je n'ai pas assez représentant pour faire un commentaire alors je vais simplement poster mes commentaires comme une réponse.

Je présume que vous utilisez des formulaires Web Asp.Net, alors comment éditez-vous le html final, Response.Write ou le réglage du texte sur un littéral? Mais si vous utilisez WebForms, ne serait-il pas plus facile d'utiliser certains contrôles intégrés.? Je ne sais pas exactement à quoi ressemblent vos données, mais peut-être que GridView serait une bonne solution car il a intégré le support de la pagination. Voici un exemple de MS sur la façon dont il peut être utilisé: http://www.asp.net/web-forms/overview/presenting-and-managing-data/model-binding/sorting-paging-and-filtering-data

+0

Oui, j'utilise Asp.Net WebForms. La sortie finale ressemble à ceci - http://imgur.com/KbaG9EB J'ai compris que le gridview ne pouvait pas donner le même effet. Et la classe Html Writer ressemble à ceci - http://pastebin.com/5UU1jFbp Donc, je cherche à prendre la liste, prendre x montant, sauter x montant sur chaque clic de bouton. puis passez la liste de la méthode d'écriture de texte html. – Con

+0

Je vois. Je dirais que si vous vous en tenez à une solution côté serveur, j'utiliserais certains des contrôles intégrés pour gérer votre scénario spécifique. Un contrôle comme le ListView semble être un bon ajustement. Il prend également en charge la pagination intégrée et peut vous fournir un contrôle total sur le balisage html généré. Pour y arriver, il faut juste une DataSource (je pense que vous pourriez utiliser une Objectdatasource, comme vous le faites après le traitement de vos données, après l'avoir lu dans votre SP), et que vous écrasez le ItemTemplate et le LayoutTemplate. Essayez d'utiliser le concepteur car il peut vous guider. – Rogn

0

Pas une réponse directe, mais vous écrasez les requêtes et les listes, qui semblent convoluer le code inutilement. Votre méthode pourrait être simplifiée:

protected void lnkNext_Click(object sender, EventArgs e) 
{ 
    ListOfAdvertAndUsers = (List<Advert_User>)Session["list"]; 

    var pgNo = 1; // don't you need to increment the page number somewhere? 
    var pgRec = 6; // should this be defined somewhere other than this method? 

    var page = ListOfAdvertAndUsers.Skip(pgRec * pgNo).Take(pgRec); 

    PopulateData(page); 
} 

Peut-être vous aidera à déterminer ce que le vrai problème est ...