Panelen



Forumnavigering
Senast inloggade
RSS
Sponsorer
Artiklar > ASP.NET 1.x och 2.x

Egen paging med MySQL, C#

Introduktion

I den här artikeln tänkte jag gå igenom hur man gör för att skapa en egen paging i ASP.NET istället för att använda Microsofts egna som finns i GridView. I en GridView så har inte SQL något med pagingen att göra utan ASP.NET löser allt åt dig. Det jag tänkte visa handlar mest om SQL och du kommer behöva de grundläggande kunskaperna i det för att kunna förstå koden.

Det hela går ut på att vi ska kolla vilken sida man är på i pagingen genom QueryString:

int CurrentPage;
int PostCount = 0; // Använder vi sen
int PostSize = 10; // Antal poster per sida

if (String.IsNullOrEmpty(Request.QueryString["Page"])) { CurrentPage = 1; } // Om inte Page har skrivits så är vi på sida 1
else { CurrentPage = Convert.ToInt32(Request.QueryString["Page"]); }


När vi hämtar posterna sen så kommer vi använda oss utav LIMIT (läs mer här).
När vi hämtar posterna ska vi hämta från den sidan vi är på och 10 (PostSize) poster fram:
"SELECT * ORDER BY dtmDateTime DESC LIMIT " + (CurrentPage - 1) * PostSize + ", " + PostSize;


Vi tar CurrentPage - 1 enbart för att det ska bli rätt med LIMITen. För att hämta 10 poster och om man vill börja på den första så ska det stå LIMIT 0, 10. Därför tar vi bort 1 på CurrentPage.

Navigera

Nu har vi alltså vilken sida vi är på och SQL-koden för att hämta 10 poster beroende på vilken sida vi är på. Det vi ska göra nu är att skapa numreringen på sidorna så vi kan navigera i pagingen.
Först så tar vi och räknar hur många poster det finns i databasen:

"SELECT Count(*) as intCount FROM tabel"


Det som vi kommer göra nu går att göra i SQL-koden med hjälp av Ices arikel http://www.aspkoll.se/GoodiesTipsRead.asp?id=30

Först ska vi ge variabeln PostCount som vi skapade tidigare värdet som vi fick från SQL-koden som vi skrev innan (SELECT Count(*) as intCount FROM tabel)
PostCount = Convert.ToInt32(objDataRow["intCount"]);

Om du inte vet hur man gör för att hämta data från databasen så kan du läsa artikeln MySQL och ASP.NET

Nu ska vi räkna ut hur många sidor det blir utav alla poster som vi räknade ut:
int Posts = ((PostCount - 1) / 10) + 1


Sedan så tar vi och loopar ut en ny länk för varje sida, om det är den sidan man är på så skriver vi bara ut siffran:
for (int i = 1; i <= Posts; i++)
{
    if (i != CurrentPage)
    {
        Literal1.Text = String.Format("<a href=\"Default.apsx?Page={0}\">
{0}</a> ", i.ToString());
    }
    else
    {
        Literal1.Text = String.Format("<span>{0}</span> ", i.ToString());
    }
}


Det var allt. Om du sedan vill göra nästa och förgående länkar så kan det se ut så här:
// Förgående
if (CurrentPage != 1)
{
    Literal1.Text = String.Format("<a href=\"Default.apsx?Page={0}\">Förgående</a> ", (CurrentPage - 1));
}
else
{
Literal1.Text = "<span>Förgående</span> ", }


Om du vill göra en "nästa" länk så adderar du bara istället för subtrahera.

Frågor och funderingar lämnas i forumet eller PM.
/ Timmie

Skapades: 2008-06-19 20:27:07
Skribent: Timmie
Lästs 1590 gånger
Betyg: 8 (totalt 10 röster)

Kommentarer

arasfang sa den 30 mars 2009 kl 13:00:
Bra guide som hjälpte mig en massa även om jag själv använder MSSQL. Dock är det lite stavfel och så som ställde
till det en del :P Bland annat så står alla sidlänkar med "apsx" istället för "aspx" ;)
© Copyright 2007-2009 Shadi Domat | Version 3.0 | Sidkarta | Policy