2010-02-26 13 views
6

Je fais une page web avec une recherche qui apporte beaucoup d'informations de MSSQL. Ce que j'ai fait est une procédure stockée qui retourne seulement la page à voir sur le site.Linkbutton inside Repeater pour la pagination ASP.Net

En ce moment je travaille sur la pagination car j'ai besoin de montrer quelque chose de similaire à google. Si vous êtes à la page 1, ils montrent les 10 premières pages et si vous êtes à la page 19, ils apparaissent depuis les pages 9 à 28.

Je pense que la meilleure option pour afficher les numéros de page est l'utilisation d'un bouton de liaison dans un répéteur. Le problème que j'ai maintenant est que je ne connais pas la meilleure façon de prendre le numéro de page à la publication.

Faire un échantillon rapide j'ai attribué un ArrayList à repeater.datasource:

<asp:Repeater ID="Repeater2" runat="server"> 
    <ItemTemplate> 
      <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument="<%# Container.DataItem %>"><%# Container.DataItem %></asp:LinkButton> 
    </ItemTemplate> 
    </asp:Repeater> 
    <asp:LinkButton ID="LinkButton2" runat="server" CommandArgument="4654">Test #1</asp:LinkButton> 

mon dossier Default.aspx.cs Je le code suivant

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (this.IsPostBack) 
     { 
      string x = LinkButton2.CommandArgument; 
      //string y = LinkButton1.CommandArgument; 
//I know this line will not work since the Linkbutton1 is inside the Repeater. 
      } 

Que dois-je faire pour Ça marche?

Est-ce que quelqu'un a une meilleure solution pour cette pagination?

Merci

Jerry

Répondre

0

Juste une pensée, avez-vous essayé d'utiliser un objet « DataGrid », en ajoutant une colonne, ce qui en fait un modèle d'élément, puis mettre dans les éléments dont vous avez besoin de répéter dans le modèle formaté. Le DataGrid gère également automatiquement la pagination lorsqu'elle est définie sur true ...

+0

Eh bien, le problème avec l'aide d'un pagging automatique est que J'ai besoin d'apporter tous les registres de la DB et de le rendre plus rapide je veux retourner juste ce qui sera montré;) –

+0

juste une pensée ... – DRapp

0

Vous n'avez jamais déclaré quel type de contrôle est votre pagination. Si vous utilisez ASP.Net 3.5, je suggère fortement d'utiliser le contrôle ListView et de gérer la pagination avec le contrôle DataPager.

+0

Ce que j'ai vu, c'est que Datapager a besoin d'un contrôle assigné à la pagination automatique et que je dois apporter tous les registres de la DB et pour le rendre plus rapide je veux retourner juste ce qui sera montré –

9

Vous êtes à la recherche de l'événement ItemCommand:

<asp:Repeater ID="Repeater1" OnItemCommand="ItemCommand" runat="server"> 
    <ItemTemplate> 
     <asp:LinkButton CommandName="ButtonEvent" CommandArgument="<%# Container.DataItem %>" Text="<%#Container.DataItem %>" runat="server"></asp:LinkButton> 
    </ItemTemplate> 
    </asp:Repeater> 

code derrière:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
    Repeater1.DataSource = Enumerable.Range(1, 10); 
    Repeater1.DataBind(); 
    } 
} 

protected void ItemCommand(Object Sender, RepeaterCommandEventArgs e) 
{ 
    Response.Write("The no. " + ((LinkButton)e.CommandSource).Text + " button was clicked!"); 
} 

... mais êtes-vous vraiment sûr que vous avez besoin LinkButton? Une balise d'ancrage HTML simple peut fonctionner aussi bien, et c'est moins fuzz. :)

+0

Merci monsieur! Ça a bien marché! –

+0

De rien, heureux de vous aider. N'oubliez pas de sélectionner une réponse acceptée pour vos questions. :) –

+0

Merci pour ce Jakob. La réponse mérite d'être acceptée. –

0

J'utilisé @JakobGade et c'est ce qui a fonctionné pour moi:

<asp:Repeater ID="rpMemList" runat="server" ClientIDMode="Static" 
onitemcommand="rpMemList_ItemCommand"> 
    <ItemTemplate> 

      <asp:LinkButton ID="lbMember" CommandArgument='<%# Eval("memID")%>' CommandName="SelMem" runat="server" ClientIDMode="Predictable"><%# Eval("memFullName")%></asp:LinkButton> 

    </ItemTemplate> 
</asp:Repeater> 

ensuite testé dans les code-behind:

protected void rpMemList_ItemCommand(object source, RepeaterCommandEventArgs e) 
    { 
     string a = e.CommandArgument.ToString(); 
     string b = e.CommandName.ToString(); 
     string c = e.CommandSource.ToString(); 
     string d = e.Item.ToString(); 

    }