2010-02-26 17 views
6

Robię stronę internetową z wyszukiwaniem, które przynosi wiele informacji z MSSQL. To, co zrobiłem, to procedura składowana, która zwraca tylko stronę, która będzie widoczna na stronie.Linkbutton inside Repeater dla stronicowania ASP.Net

W tej chwili pracuję nad stronicowaniem, ponieważ muszę pokazać coś podobnego do google. Jeśli jesteś na stronie 1, pokazują one pierwsze 10 stron i jeśli jesteś na stronie 19, to pokazują one od strony 9 do 28.

Myślę, że najlepszą opcją wyświetlania numerów stron jest użycie przycisku link w repeterze. Problem, który mam teraz jest to, że nie wiem najlepszy sposób, aby wziąć numer strony na poczcie zwrotnej.

wykonując szybkie próbkę I przypisany ArrayList do 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> 

Na moich Default.aspx.cs plik mam następny kod

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

co mam czynić, aby to działa?

Czy ktoś ma lepsze rozwiązanie dla tego stronicowania?

Dziękuję

Jerry

Odpowiedz

0

Tylko myśl, czy próbowałeś pomocą „DataGrid” obiekt, dodając kolumnę, co czyni go szablonu elementu, a następnie wprowadzenie elementów, które trzeba powtarzać w obrębie szablon sformatowany. DataGrid automatycznie obsługuje stronicowanie po ustawieniu wartości true ...

+0

Cóż, problem z zastosowaniem automatycznego pagging jest to, że Muszę zabrać wszystkie rejestry z DB i zrobić to szybciej Chcę zwrócić tylko to, co będzie pokazane;) –

+0

tylko jedna myśl ... – DRapp

0

Nigdy nie stwierdzono, jaki rodzaj kontroli jest to stronicowanie. Jeśli korzystasz z ASP.Net 3.5, wówczas HIGHLY zasugeruję użycie kontrolki ListView i obsługę stronicowania za pomocą kontrolki DataPager.

+0

To, co widziałem, to że Datapager potrzebuje kontrolki przypisanej do automatycznego stronicowania i do że muszę zabrać ze sobą wszystkie rejestry DB i żeby było szybciej Chcę zwrócić tylko to, co zostanie pokazane. –

9

Patrzysz na razie 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> 

Kod za:

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

... ale jesteś naprawdę pewien, że potrzebujemy LinkButton? Prosty znacznik zakotwiczenia HTML może działać równie dobrze, a to mniej fuzz. :)

+0

Dziękuję, proszę pana! Udało się świetnie! –

+0

Nie ma za co, z przyjemnością. Nie zapomnij zaznaczyć zaznaczonej odpowiedzi na swoje pytania. :) –

+0

Dziękuję za to Jakob. Odpowiedź zasługuje na akceptację. –

0

użyłem @JakobGade i to pracował dla mnie:

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

Następnie testowano go w kod z opóźnieniem:

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(); 

    }