2010-02-26 14 views
6

Ich mache eine Webseite mit einer Suche, die eine Menge Informationen aus MSSQL bringt. Was ich getan habe, ist eine gespeicherte Prozedur, die nur die Seite zurückgibt, die auf der Website zu sehen ist.Linkbutton innerhalb Repeater für Paging ASP.Net

Im Moment arbeite ich am Paging, da ich etwas ähnliches wie Google zeigen muss. Wenn Sie auf Seite 1 sind, zeigen sie zuerst 10 Seiten und wenn Sie auf Seite 19 sind, zeigen sie seit Seite 9 bis 28.

Ich denke, die beste Möglichkeit, die Seitenzahlen anzuzeigen, ist eine Linkbutton in einem Repeater. Das Problem, das ich jetzt habe, ist, dass ich den besten Weg nicht kenne, die Seitennummer beim Postback zu nehmen.

eine schnelle Probe Doing zugewiesen ich eine 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> 

Bei meiner Default.aspx.cs Datei Ich habe den nächsten Code

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. 
      } 

Was soll ich tun, um Es klappt?

Hat jemand eine bessere Lösung für dieses Paging?

Danke

Jerry

Antwort

0

Nur ein Gedanke, haben Sie versucht, ein „Datagrid“ Objekt verwenden, das Hinzufügen einer Spalte, es eine Elementvorlage zu machen und dann in den Elementen setzen Sie innerhalb der wiederholen müssen Vorlage formatiert. Das DataGrid behandelt auch automatisch Paging, wenn es auf "True" gesetzt ist.

+0

Nun, das Problem mit einer automatischen pagging ist, dass Ich muss alle Register aus der DB holen und es schneller machen Ich will nur was angezeigt wird zurückgeben;) –

+0

nur ein Gedanke ... – DRapp

0

Sie haben nie angegeben, um welche Art von Steuerelement es sich handelt. Wenn Sie ASP.Net 3.5 verwenden, schlage ich vor, das ListView-Steuerelement zu verwenden und das Paging mit dem DataPager-Steuerelement zu verarbeiten.

+0

Was ich gesehen habe, ist, dass Datapager ein Steuerelement benötigt, das automatisch und für Paging zugewiesen wird dass ich alle Register aus dem holen muss DB und um es schneller zu machen möchte ich nur zurück, was gezeigt wird –

9

Sie suchen nach dem ItemCommand Event:

<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 hinter:

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!"); 
} 

... aber sind Sie wirklich sicher, dass Sie die Linkbutton müssen? Ein einfaches HTML-Anchor-Tag funktioniert genauso gut und es ist weniger Fuzz. :)

+0

Danke, mein Herr! Es hat super funktioniert! –

+0

Gern geschehen, froh zu helfen. Vergessen Sie nicht, eine akzeptierte Antwort für Ihre Fragen zu markieren. :) –

+0

Danke für diesen Jakob. Die Antwort verdient es, akzeptiert zu werden. –

0

verwenden ich @JakobGade und das ist, was für mich gearbeitet:

<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> 

getestet es dann im 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(); 

    }