03. december 2002 - 15:09Der er
4 kommentarer og 1 løsning
Flere "selected" i en rullemenu
Hej,
En stored procedure (SP) i en database genererer en række tal. I de forskellige options i en rullemenu (af multiple slagsen) er value også en række tal. Rullemenuen er genereret af samtlige poster i den tabel for nogle er trukket ud i min SP.
Jeg vil gerne have det sådan at netop de tal der kommer fra min SP bestemmer hvilke options der er selectedi rullemenuen. Jeg har tænkt på om man kunne omdanne tallene fra min SP til et array og så lade ASP-koden der generer rullemenuen løbe gennem dette array for hver option den udskriver, men jeg har ikke fundet de vise sten. Er der nogen der kan hjælpe?
%> <select name="tal"> <% strSQL = "SELECT tal FROM TabelTal ORDER BY tal DESC" Set rs = Conn.Execute(strSQL) i = 1 Do While Not rs.EOF %> <option value="<%=i%>"<%If (i = rs("tal")) Then%> selected<% End If%>><%=i%></option> <% i = i + 1 rs.MoveNext Loop %> </select> <%
okay, det kræver vist en lidt grundigere forklaering...
Min SP henter nogle specifikke records ud af en tabel. Det kunne fx være 1,5,6,7,12
Min rullemenu dannes også ved et db-udtræk. Problemet er beskrevet i [] i koden: <% Dim objRSansat Set objRSansat = Server.CreateObject("ADODB.Recordset")
strSQLList = "SELECT AnsatID, Fornavn, Efternavn FROM Ansatte " & _ "ORDER BY Fornavn;" objRSansat.Open strSQLList, objConn
If objRSansat.EOF = True Then Response.Write "<p class=""heading"">Der er ikke angivet nogen personer i databasen!</p>" Else Response.Write "<select class=inp multiple name=udvalg size=5>" objRSansat.MoveFirst Do Until objRSansat.EOF
If [her skal være en betingelse der gennemser data fra min SP hvis objRSansat("AnsatID") er lig med en af tallene fra min SP skal denne option være selcted] Then Response.Write "<option selected value=""" & objRSansat("AnsatID").Value & """>" & objRSansat("Fornavn").Value & " " & objRSansat("Efternavn").Value & ", " & objRSansat("AnsatID").Value & "</option>" & vbCrLf Else Response.Write "<option value=""" & objRSansat("AnsatID").Value & """>" & objRSansat("Fornavn").Value & " " & objRSansat("Efternavn").Value & ", " & objRSansat("AnsatID").Value & "</option>" & vbCrLf End If
objRSansat.MoveNext Loop Response.Write "</select>" End If
objRSansat.close Set strSQL = Nothing Set objRSansat = Nothing %>
Jeg har fundet en løsning der virker. MEN jeg har været nødt til at angive antallet af værdier i mit array "manuelt" (se første kodelinje). Antallet af værdier er dynamisk, så jeg skal have fundet en måde hvorpå jeg kan finde antallet af records og overfør denne værdi til ArrayID(). Hm....
<% Dim objRSmedl, adCmdStoredProcMedl, i, ArrayID(6) Set objCmd = Server.CreateObject("ADODB.Command") Set objCmd.ActiveConnection = objConn adCmdStoredProcMedl = 4 objCmd.CommandText = "procUdvalg" & Session("Udvalg") objCmd.CommandType = adCmdStoredProcMedl Set objRSmedl = Server.CreateObject("ADODB.Recordset") Set objRSmedl = objCmd.Execute
If objRSmedl.EOF Then Response.Redirect "Show.asp" Else i = 0 objRSmedl.MoveFirst Do Until objRSmedl.EOF ArrayID(i) = objRSmedl("AnsatID").Value i = i + 1 objRSmedl.MoveNext Loop End If objRSmedl.Close Set objRSmedl = Nothing For i = LBound(ArrayID) To UBound(ArrayID) Response.Write "ArrayID("& i &") = "& ArrayID(i) & "<br>" Next %> <br> <% Dim objRSansat Set objRSansat = Server.CreateObject("ADODB.Recordset")
strSQLList = "SELECT AnsatID, Fornavn, Efternavn FROM Ansatte " & _ "ORDER BY Fornavn;" objRSansat.Open strSQLList, objConn
If objRSansat.EOF = True Then Response.Write "<p class=""heading"">Der er ikke angivet nogen personer i databasen!</p>" Else Response.Write "<select class=inp multiple name=udvalg size=5>" objRSansat.MoveFirst Do Until objRSansat.EOF
Response.Write "<option " For i = LBound(ArrayID) To UBound(ArrayID) If ArrayID(i) = objRSansat("AnsatID").Value Then Response.Write "selected" Next Response.Write " value=""" & objRSansat("AnsatID").Value & """>" & objRSansat("Fornavn").Value & " " & objRSansat("Efternavn").Value & ", " & objRSansat("AnsatID").Value & "</option>" & vbCrLf
objRSansat.MoveNext Loop Response.Write "</select>" End If
objRSansat.close Set strSQL = Nothing Set objRSansat = Nothing %>
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.