login  Naam:   Wachtwoord: 
Registreer je!
 Forum

ASP.net controller met page functie (Opgelost)

Offline Martijn2008 - 22/11/2009 19:26
Avatar van Martijn2008PHP beginner Hallo allemaal,

Ik ben op zoek naar een functie/controller waarmee ik de iteratie kan limiteren, waardoor er pagina's ontstaan. Ik wil dit bijvoorbeeld gebruiken voor een gastenboek.

Momenteel maak ik gebruik van de ASP.net repeater, maar weet niet of het daarmee mogelijk is. De mogelijkheid van de ASP.net repeater vind ik trouwens wel ideaal, je kan gewoon je eigen HTML-code gebruiken.

Het liefst zou ik dit met AJAX maken, maar ik ken de moeilijkheidsgraad daar niet van(ben nog een beginner met Csharp/ASP.net). Ik wil de functionaliteit van het .NET-framework optimaal benutten. Ik wil dus zo min mogelijk code tikken :p.

Bedankt alvast voor jullie hulp!

Martijn

6 antwoorden

Gesponsorde links
Offline cloudstrife - 22/11/2009 20:00
Avatar van cloudstrife PHP beginner Je bedoeld dat je met paginering wil werken?

Dan kan je gewoon je repeater blijven gebruiken. Het is wat je als datasource voor de repeater gebruikt dat je moet gaan limiteren. Je gaat dus de beperking via de query doen. Bij een mysql database kan je limit gebruiken in je select.
Offline Martijn2008 - 22/11/2009 20:12
Avatar van Martijn2008 PHP beginner Okè, klinkt logisch, maar hoe doe ik dat dan, want ik ben een heuze beginner met ASP.net. Ik bewonder de functionaliteit en mogelijkheden van het .NET framework echt enorm. Ik begin er ook steeds meer van te begrijpen. Zou je misschien je uitleg kunnen onderbouwen met een voorbeeld. Hoe verander ik die query in de datasource bijvoorbeeld en wat moet ik in doen om de paginanummering te krijgen?
Offline Abbas - 22/11/2009 20:57 (laatste wijziging 22/11/2009 21:02)
Avatar van Abbas Gouden medaille

Crew .NET
cloudstrife schreef:
Je gaat dus de beperking via de query doen. Bij een mysql database kan je limit gebruiken in je select.
Het is niet nodig dat je gaat limiteren op je query zelf. Zelfs op een Repeater kan je Paging toepassen dankzij de PagedDataSource! Plaats volgende ASP.NET opmaak onder je Repeater in je aspx-pagina:

  1. <asp:LinkButton ID="lnkPrev" runat="server" Text="<<" OnClick="lnkPrev_Click" />
  2. <asp:Label ID="lblPages" runat="server" />
  3. <asp:LinkButton ID="lnkNext" runat="server" Text=">>" OnClick="lnkNext_Click" />

De C# die alles doet werken is dit:

  1. public int Current
  2. {
  3. get
  4. {
  5. object o = this.ViewState["_Pagina"];
  6. return o == null ? 0 : (int)o;
  7. }
  8. set { this.ViewState["_Pagina"] = value; }
  9. }
  10.  
  11. protected void Page_Load(object sender, EventArgs e)
  12. {
  13. Bind();
  14. }
  15.  
  16. protected void lnkPrev_Click(object sender, EventArgs e)
  17. {
  18. Current--;
  19. Bind();
  20. }
  21.  
  22. protected void lnkNext_Click(object sender, EventArgs e)
  23. {
  24. Current++;
  25. Bind();
  26. }
  27.  
  28. private void Bind()
  29. {
  30. PagedDataSource pds = new PagedDataSource();
  31. String sqlString = "SELECT Naam, Bericht, Datum FROM TblGuestBook ORDER BY Id DESC";
  32. DataTable tempTable = new DataTable();
  33. try
  34. {
  35. SqlDataAdapter adaptData = new SqlDataAdapter(sqlString, sqlConn);
  36. adaptData.Fill(tempTable);
  37. }
  38. catch (Exception ex)
  39. {
  40. throw new Exception(ex.Message);
  41. }
  42. pds.DataSource = tempTable.DefaultView;
  43. pds.AllowPaging = true;
  44. pds.PageSize = 5;
  45. pds.CurrentPageIndex = Current;
  46. lblPages.Text = (Current + 1) + "/" + pds.PageCount;
  47. lnkPrev.Enabled = !pds.IsFirstPage;
  48. lnkNext.Enabled = !pds.IsLastPage;
  49. repeatItems.DataSource = pds;
  50. repeatItems.DataBind();
  51. }

Voorzie wel volgende libraries in je code:

  1. using System.Data;
  2. using System.Data.SqlClient;
Offline Martijn2008 - 22/11/2009 21:05
Avatar van Martijn2008 PHP beginner Interessant, hoe wordt de pagina eigenlijk opgehaald(GET?)?? Ik heb nu ook al een datasource met query op mijn ASP.net pagina staan. Hoe vind de koppeling nu dan plaats tussen de code behind en de datasource? Moet ik mijn datasource aanpassen voor gebruik van deze code?
Offline Abbas - 22/11/2009 21:11
Avatar van Abbas Gouden medaille

Crew .NET
De huidige pagina wordt in de ViewState van de pagina gezet.

De koppeling. Zoals je kan zien in de Bind() methode staat er op de voorlaatste regels dit:

  1. repeatItems.DataSource = pds;

Deze regel wil dus zeggen dat je de DataSource van de Repeater gelijk zet aan die 'pds' (PagedDataSource). Daaronder staat nog repeatItems.DataBind(); , dit is om de Data Source aan de Control te binden.

Kortweg, je kan die query in je aspx-pagina dus zeker weglaten. Dit is trouwens in mijn ogen niet ideaal werken. Je Database-logica staat in de View en dit is naar mijn bescheiden mening niet handig. Best is om al die dingen te scheiden.
Offline Martijn2008 - 22/11/2009 21:22
Avatar van Martijn2008 PHP beginner Het is me duidelijk, bedankt voor de heldere uitleg !
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.183s