Avatar billede KatieBS Nybegynder
19. marts 2012 - 15:46 Der er 6 kommentarer

jQuery - paging

Hej!

Jeg er igang med at lave et booking system, hvor man bla. kan gå ind og se en oversigt af en bookings (som bliver hentet op fra database). Men da jeg ikke vil have dem alle listet ned af, vil jeg lave paging. Det kan man jo så smart gøre med jQuery, problemet er bare jeg ikke aner hvordan jeg får det ind i mine koder.

Det plugin jeg vil bruge til paging
http://blog.ajaxmasters.com/jquery-pagination-plugin/

også det stykke der skal bruges på
        pnlOrdre.Visible = false;

        DataTable dt = objBook.GetBookinger(Convert.ToInt32(Session["UserId"]));
        if (dt.Rows.Count != 0)
        {
            litOversigt.Text += "<span class='oversigt'><table width='400px' cellpadding='5px'>";
            litOversigt.Text += "<tr><td>ID</td><td>Pick-up date</td><td>Pick-up Adress</td><td>Consignee</td><td>Country</td>";

            foreach (DataRow Row in dt.Rows)
            {
                litOversigt.Text += "<tr bgColor='#f1f1f1';'>";
                litOversigt.Text += "<td width='25'>" + Row["fldBookingID"] + "</td>";
                litOversigt.Text += "<td>" + Convert.ToDateTime(Row["fldDate"].ToString()).ToShortDateString() + "</td>";
                litOversigt.Text += "<td>" + Row["fldPickUp"] + "</td>";
                litOversigt.Text += "<td>" + Row["fldName"] + "</td>";
                litOversigt.Text += "<td>" + Row["fldCountry"] + "</td>";
                litOversigt.Text += "<td width=\"13\"><a href=\"Oversigt.aspx?id=" + Row["fldBookingID"] + "\"><img src=\"Img/Icons/pil.png\" border=\"0\" height=\"10\" alt=\"Rediger (" + Row["fldName"] + ")\" /></a></td>";
                litOversigt.Text += "</tr>";
            }

            litOversigt.Text += "</span></table>";
        }
        else
        {
            litOversigt.Text += "Der er ingen ordre";
        }

Håber det er overskueligt, og nogen vil hjælpe mig igennem det!
Jeg har downloadet filen og lagt den inde i min mappe. Men nu er jeg i tvivl om hvor de forskellige ting skal skrives henne.
Avatar billede keysersoze Guru
19. marts 2012 - 16:22 #1
Du skal ret skarpt adskille .NET og jQuery/javascript. Det du laver i din kode er ren .NET og det kan du ikke bruge i forbindelse med et sådan et jQuery callback (og en helt anden diskussion ville så nok være om ikke en egentlig data-kontrol, fx en Repeater, ville være bedre og lettere at benytte end ovenstående - med en .NET datakontrol ville du også kunne finde noget med understøttelse for paging og måske endda callback) simpelthen fordi du med jQuery skal have et resultat i noget XML eller JSON (eller i værste fald egentlig HTML) og .NET-koden kræver .NET-events for at kunne skabe noget sammenhængende.

Uden at have kendskab til det specifikke jQuery-script vil mit bedste gæt gå på, at du skal lave en WebMethod, der tager imod de parametre scriptet sender afsted og så returnerer det format scriptet forventer - i din WebMethod ville det eneste du så skulle gøre være at springe X poster over og tage Y poster ud hvor X og Y formentlig er 2 af parametrene.
Avatar billede lasserasch Juniormester
19. marts 2012 - 18:16 #2
Og med WebMethod mener keysesoze en Webservice. Bare lige hvis du var i tvivl.

Den webservice kalder din Javascript/Jquery så.

Den kunne f.eks. se ud som vist herunder.
Den retunerer JSON eller XML som du så behandler og viser på din side.


Det du gør med at udskrive direkte fra din kode vil også virke, men det er en newbie fejl i ASP.Net udvikling, så det er efter min mening roden til rigtig meget dårligt kode.

Så se enten på Repeater kontrollen som tager f.eks. en Generisk liste som datasource og udskriver værdier herfra til HTML, eller brug en eller anden form for Data Access Layer (f.eks. en webservice som vist herunder). Lad den trække dine data ud fra din database og sende videre til Jquery/Javascirpt, som så kan præsentere det på siden.

Mvh.
Lasse




namespace DataService
{

    public class Booking
    {
        public string Name { get; set; }
        public DateTime Date { get; set; }
    }

    public class DAL
    {
        public string PagedBookings(int page)
        {
            int pagesize = 3;
            List<Booking> bookings = new List<Booking>();
         
            // Her noget kode som henter bookings fra Memory, Database eller lign.
            // Disse bliver så lagt i en collection af en slags.
            bookings.Add(new Booking() { Date = DateTime.Now, Name = "Hans Hansen" });
            bookings.Add(new Booking() { Date = DateTime.Now, Name = "Bent Bentsen" });
            bookings.Add(new Booking() { Date = DateTime.Now, Name = "Mads Madsen" });
            bookings.Add(new Booking() { Date = DateTime.Now, Name = "Jens Jensen" });
            bookings.Add(new Booking() { Date = DateTime.Now, Name = "Mikkel Mikkelsen" });


            // Nu har du alle dine bookings fra din database. F.eks. 1000 stk. Men du vil kun retunere dem som skal vises på den nuværende page.

          List<Booking> PagedBookings = bookings.Skip(page * pagesize).Take(pagesize).ToList();

            // Nu har du en liste over bookings du gerne vil retunere som f.eks. noget JSON til dit Javascript
            // Dertil bruger man f.eks. en JavascriptSerializer.
            var jss = new System.Web.Script.Serialization.JavaScriptSerializer();
            return jss.Serialize(PagedBookings);
        }
    }

}
Avatar billede keysersoze Guru
19. marts 2012 - 22:17 #3
En decideret webservice er nu ikke nødvendig - en static metode dekoreret med webmethod på page level er tilstrækkelig, den kan i sig selv også returnere data som JSON.
Avatar billede lasserasch Juniormester
19. marts 2012 - 23:00 #4
Fair nok... Så kan man jo bare kun bruge logikken på den ene side, hvilket jeg måske synes begrænser det noget.

I et system som indeholder mere end en side (hvilket man vel må antage et bookingssystem gør), må man da gå ud fra at bookings data skal bruges i flere kontekster.

Men okay, måske tænker jeg lidt for langt frem ift. det konkrete spørgsmål :-)

Mvh.
Lasse
Avatar billede keysersoze Guru
19. marts 2012 - 23:14 #5
Det er klart at der er for og imod begge løsninger - mit gæt var bare at holde det på så simpelt niveau som muligt ;)
Avatar billede mireigi Novice
20. marts 2012 - 00:15 #6
Vil stærkt fraråde at hente ALLE booking records fra databasen og så sortere på dem i web koden.

Det er langt mere performance venlig og sikkert at lave paging i databasen.

Der kan findes en del om det her:
http://lmgtfy.com/?q=sql%20paging
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester