Visa vald post i listboxen när sidan laddas om
Förord
Om du har en listbox innehållande massor av alternativ - hur skall du då göra för att kunna markera samma alternativ igen när du sedan laddat om sidan? Detta exempel är skrivet med förutsättning att vi har artiklar som vi hämtar ut en lista med artiklar som man kan välja mellan. Varje artikel har ett id vilket gör att alla artiklar är unika och kan således identifieras.Vi börjar med att låtsas att ett recordset innehåller följande data:
1 - Radio & TV
2 - Internet
3 - Video
4 - DVD
5 - Övrigt
När sidan startas, så skapar vi denna lista. Nedan körs en sql-sats och resultatet av den ser ut som enligt ovan. Vi börjar med att loopa i recordsetet. Om värdet ID överensstämmer så skall posten vara vald, annars inte.
<%
' -- hämtar lista med de egna posterna
set rst=con.execute("select id, namn from kommunikationstyper")
Do while not rst.eof
Selected = ""
If Clng(Id) = cLng(rst(0)) then selected = " selected"
lstArtiklar = lstArtiklar & "" & vbCrLf
rst.MoveNext
Loop
rst.close
%>
Koden för att visa listboxen
Nu har vi en sträng innehållande html-kod för att presentera alla artiklar. Då är det enkelt att skriva en option som innehåller resultatet.
Ovan har vi skapat en form som vi döper till form1. Den skall submitta sig själv och när man i listboxen byter alternativ kommer den att göra en submit enligt onChange - anropet.
Hämta ut valt id
När du nu valt ett alternativ så kommer sidan laddas om - då är det dags att ta reda på vilket alternativ det är. Vi gör en förfrågan till objektet lstArtiklar såsom vi döpte select-boxen ovan.
<%
Id = Request("lstArtiklar")
if Id = "" Then Id = -1
' -- hämtar lista med de egna posterna
set rst=con.execute("kommunikationSel")
Do while not rst.eof
....
Om nu det fanns något alternativ valt så kommer vi att fånga upp det med id. Så som du ser i första exemplet ovan så står det If cLng(id) = cLng(rst(0)) . Det gör att om nu Id innehåller något annat än -1 så kommer den att automatiskt bli selekterad.
Hela funktionen samlad
Jag tänkte lägga ihop dessa tre block nu för att visa hur hela programkoden ser ut i detta exempel.
<%
Id = Request("lstArtiklar")
if Id = "" Then Id = -1
' -- hämtar lista med de egna posterna
set rst=con.execute("kommunikationSel")
Do while not rst.eof
Selected = ""
If Clng(Id) = cLng(rst(0)) then selected = " selected"
lstArtiklar = lstArtiklar & "
En annan teknik
Det kan också vara så att det inte finns tillräckligt många poster att det anses intressant att använda sig av ett anrop till databasen. Då kan du istället använda dig av en array för att uppnå samma resultat.
<%
arrayData = "Radio & tv;Internet;Video;DVD;Övrig"
Dim alternativ
alternativ = Split(arrayData, ";")
Id = Request("lstArtiklar")
if Id = "" Then Id = -1
For a = 0 To Ubound(alternativ) - 1
Selected = ""
If Clng(id) = cLng(alternativ(a)) then selected = " selected"
lstArtiklar = lstArtiklar & "
Här använder vi en sträng som vi separerar varje alternativ med ett semikolon. Därefter använder vi Split-kommandot för att lägga om dom i en Array och avslutar med att utföra samma sak såsom det hade varit ett recordset. Tänk på att när du använder Split så får första objektet värdet 0,1,2,3,4 osv..
Den tredje varianten
Om du bara har kanske två eller tre alternativ så kan du enkelt göra följande:
<%
Id = Request("lstArtiklar")
if Id = "" Then Id = -1
%>
Om det inte fungerar..
- Kontrollera att name i
0 Kommentarer