webForumDet fria alternativet

Paging med dropdown

ASP

12 svar · 290 visningar · startad av ironhead

Medlem sedan mars 20011 346 inlägg
Frågan#1

Halloj!

Jag har gjort en paging på en sida, där det står visa sida x av x sidor och längst ner har en bakåt/framåtpil.

Värdet på Antal visade poster hämtas med querystring som heter "SidBryt".

Nu skulle jag vilja utöka pagingen med en dropdown-ruta där man kan välja 15, 30 eller 60 poster/sida. 15 är default.

Hur ska man göra?

Laddar man bara om sidan när man väljer antal poster/sida och lägger till värdet till befintlig paging eller?

Behövs kod?

Medlem sedan sep. 20026 425 inlägg
#2

Testa med detta

<%
Dim Cn, Rs, page, rowcount, pagecounter, arrRecs, i, posts(2), Antal, pagecount, Pz 
page = Request.Querystring("page") 
If page="" Then page=1 
rowcount=0 

Set Cn = Server.CreateObject("ADODB.Connection") 
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db_.mdb") 
Set Rs = Cn.Execute("Select falt1,falt2,falt3 From tbl_ Order By Id Desc") 

If Rs.EOF Then 
Rs.Close : Set Rs = Nothing 
Cn.Close : Set Cn = Nothing 
Response.Write "Inga poster i databasen än.." 
Else 

With Rs 
.Close 
.Cursortype=3 
.Open 
.Pagesize=15 'antalet poster per sida
End With 

Rs.Absolutepage=cInt(page) 

Antal = Rs.Recordcount 
Pz = Rs.Pagesize
pagecount = ((Antal-1) \ Pz) -- 1 
 

arrRecs = Rs.GetRows(Pz) 
Rs.Close : Set Rs = Nothing 
Cn.Close : Set Cn = Nothing 

If IsArray(arrRecs) Then
 
For i = 0 To UBound(arrRecs,2) And rowcount < Pz 
posts(0) = arrRecs(0,i) 'första fältet
posts(1)= arrRecs(1,i) 'andra fältet
posts(2)= arrRecs(2,i) 'tredje fältet
'glöm ej att för nya poster ändra siffrorna med +1

Response.Write posts(0) & " | " & posts(1) & " | " & posts(2) 

Next
 
End If 

'själva pagingen
If Antal > Pz Then
%><form method="get" action="sida.asp">
<select name="page" size="1" onChange="visaVal(this);">
<option>Sida</option>
<%
For pagecounter = 1 to Pagecount 
Response.Write "<option value=""" & pagecounter & """>" & pagecounter & "</option>"
Next 
%>
</select>
</form>
End If

End If
%>

Koden är otestad, men förhoppningsvis fungerar den. :)

/r

Glömde:

i <head> på din sida lägger du till följande kod:

<script language="javascript" type="text/javascript">
<!--
function visaVal(val) {
    window.location = val.options[val.selectedIndex].value;
}
//-->
</script>
Medlem sedan mars 2003772 inlägg
#3

Du har väl nån variabel vid namne intPageSize eller liknande?

intPageSize = 1
ObjRs.PageSize = IntPageSize

Du kan ladda om sidan när man valt i dropdownen och ändra värdet på intPageSize, så det blir nåt i stil med

VarPageSize = Request.Form("dropdown")

intPageSize = VarPageSize ' <---- där ändras den beroende på vad Request.Form("dropdown") innehåller
ObjRs.PageSize = IntPageSize

Om detta inte riktigt stämmer med din kod så får du gärna visa lite av din kod.

Medlem sedan mars 2003772 inlägg
#4

Du kanske ska ha defaultsizen också.

VarPageSize = Request.Form("dropdown")
If VarPageSize = "" then VarPageSize = "15"

intPageSize = VarPageSize ' <---- där ändras den beroende på vad Request.Form("dropdown") innehåller
ObjRs.PageSize = IntPageSize
Medlem sedan sep. 20026 425 inlägg
#5

Aj, jag läste fel!!!! :(
Testa med denna kod i stället. I bodyn där dropdownlistan ska vara:

<form method="get" action="sida.asp">
<select name="antal" size="1" onChange="visaVal(this);">
<option>Poster per sida</option>
<option value="15">15</option>
<option value="30">30</option>
<option value="60">60</option>
</select>
</form>

Du måste nog ha med eventuella värden efter sida.asp i action i formen.
Sen kollar du med en villkorssats där du sätter antalet poster som ska visas per sida i pagingen:

Select Case Cint(Request.Querystring("antal"))

Case 15
antalat_poster = 15

Case 30
antalat_poster = 30

Case 60
antalat_poster = 60

Case Else
antalat_poster = 15

End Select

Sen använder du mitt javascript i head på sidan också:

<script language="javascript" type="text/javascript"> 
<!-- 
function visaVal(val) { 
window.location = val.options[val.selectedIndex].value; 
} 
//--> 
</script>

Hoppas att det fungerar. :)

Medlem sedan mars 20011 346 inlägg
#6

Såhär ser pagingen ut:

	SidB = Request.Querystring("SidBryt")
	AntalRad = Request.Querystring("AntRad")
	
	if cint(antalrad) < 1 then
	  AntalRad = 1
	end if

	' Kod för att hämta data från db...

	SidSlut = cint(SidB) + cint(AntalRad) - 1
		     'Antal träffar i db	
	if SidSlut > ap.RecipeCol.Count  then
	  SidSlut = ap.RecipeCol.Count 
	end if

	if SidSlut<>0 Then
	  Nu visas: <%=AntalRad%> till <%=SidSlut%>
	end if

	for l = cint(AntalRad) to cint(SidSlut)
	  'Skriv ut data...
	next

  if AntalRad > 1 then
   'Skriv ut bakåtpil
   <a href="sida.asp?SidBryt=<%=Request.Querystring("SidBryt")%>&AntRad=<%=AntalRad - cint(Request.Querystring("SidBryt"))%>>Bakåt</a>
  end if

  if SidSlut <> ap.RecipeCol.Count  then
   'Skriv ut framåtpil
   <a href="sida.asp?SidBryt=<%=Request.Querystring("SidBryt")%>&AntRad=<%=AntalRad + cint(Request.Querystring("SidBryt"))%>>Framåt</a>
  end if
Medlem sedan mars 20011 346 inlägg
#7

m_soderlund > Om jag står på sidan för post: 225 av 240 och vill istället för att visa 15 poster gå över till 60 poster/sida, falierar inte ditt skript då?

Medlem sedan sep. 20026 425 inlägg
#8

ironhead: det behöver scriptet inte göra. Du kan skicka vidare till startsidan, med variabeln antal så att det blir sida.asp?antal=60
Beroende på om du vill skicka tillbaka till post 225 så får du räkna ut vilken sida posten ligger på. 240/60 ger 4, och eftersom 240-60 är 180 och d 225-240 är större än 180, så skickar du vidare till &page=4 så att sidans url blir så här: sida.asp?antal=60&page=4
Det borde inte vara så svårt att skriva kod för att skicka vidare till rätt sida. :)

Vad gör Sidb och AntRad-variablerna? Är AntRad en variabel som har värdet för hur många pagingsidor det finns?

Medlem sedan mars 20011 346 inlägg
#9

Jag löste det såhär:

if Request.form("antal")<>"" Then
	 select case Request.form("antal")
	 case 15
	  SidB="15"
	 case 30
	  SidB="30"	 	 
	 case 60
	  SidB="60"	 
	 case else
	 SidB="15"
	 End Select
else
	 select case Request.querystring("antal")
	 case "15"
	  SidB="15"
	 case "30"
	  SidB="30"	 	 
	 case "60"
	  SidB="60"	 
	 case else
	  SidB="15"
	 End Select
end if

<%if AntalRad > 1 then%>
<td>
<a href="sida.asp?SidBryt=<%=SidB%>&AntRad=<%=AntalRad - cint(SidB)%>&antal=<%=Request("antal")%>" >Föregående sida</a>
</td>
<%end if%>
<%if SidSlut <> sap.RecipeCol.Count  then%>
<td>
<a href="sida.asp?SidBryt=<%=SidB%>&AntRad=<%=AntalRad + cint(SidB)%>&antal=<%=Request("antal")%>" >Nästa sida</a>
</td>
<%end if%>

<form method="post" action="sida.asp?SidBryt=<%=Request("SidBryt")%>&AntRad=<%=Request("AntRad")%>" name=forma>
<table border="0"><tr>
<td>Antal poster/sida</td>
</tr>
 <td><select name="antal" size="1" onChange="document.forma.submit()">
	<option value="15" <%if Request("antal")="15" Then Response.Write "selected" end if%>>15</option>
	<option value="30" <%if Request("antal")="30" Then Response.Write "selected" end if%>>30</option>
	<option value="60" <%if Request("antal")="60" Then Response.Write "selected" end if%>>60</option>
  </select></td>
</tr>
</table>
</form>

...men det kanske är ett "dåligt" sätt...kanske det finns nåt bättre?

Medlem sedan mars 20011 346 inlägg
#10

SidB=Antal poster/sida som ska visas
AntRad=Vilken post sidan ska börja på

Medlem sedan sep. 20026 425 inlägg
#11

Om det fungerar så antar jag att det är okej.
Men varför har du Request.Form("antal") i ena villkorssatsen och Request.Querystring("antal") i andra villkorssatsen?

Medlem sedan mars 20011 346 inlägg
#12

jag har en låååång sträng med variabler som jag skickar in till sidan och om jag postar med "get" så får jag inte med dessa värden.....och om jag bara har "request.form"....så får jag inte med "antal" när jag navigerar framåt eller bakåt mellan sidorna.

Medlem sedan sep. 20026 425 inlägg
#13

Okej.. :D

270 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)