15. juli 2004 - 13:53Der er
19 kommentarer og 1 løsning
Update af option form/dropdown
Jeg har en database med 2 tabeller. En med data og en med personer.
Tabellen med personer bruges som en dropdown list og skriver navnet man har valgt fint ned i db'en. Som vist herunder:
<select name="ID_salesperson">
<% Set cnnID = Server.CreateObject("ADODB.Connection") cnnID.Open Application("DSN_dealer")
sql="SELECT * FROM Salesperson ORDER BY Name" Set rs=cnnID.execute(sql)
Do While Not rs.eof Response.Write("<option value=""" & rs("name") & """>" & _ rs("name") & "</option>") rs.movenext Loop
cnnID.close Set cnnID=Nothing Set rs=Nothing %> </select>
Mit problem bliver herefter, at jeg skal kunne rettet denne - men at den skal angive, når man går ind i edit.asp?id=xxxx - HVEM der var ID_Salesperson?? altså finde den person i listen og markere ham som "selected".
Det kan jeg bare ikke få til at virke.. Kan i hjælpe?
Nu har jeg lavet det sådan her, men den taget stadig og returnere den første i tabellen..
<select name="ID_salesperson">
<%
StrSQL = "SELECT * FROM Salesperson ORDER BY Name" Set rs = cnnID.Execute(strSQL) Do While Not rs.eof if request.querystring("id") = rs("name") then Response.Write("<option value=""" & rs("name") & """ selected>" & _ rs("name") & "</option>") else Response.Write("<option value=""" & rs("name") & """>" & _ rs("name") & "</option>") end if rs.movenext Loop
Det er evt. forkert bygget op, her er min new.asp fil som sender et tal ned i tabellen data.
sql="SELECT * FROM Salesperson ORDER BY Name" Set rs=cnnID.execute(sql)
Do While Not rs.eof Response.Write("<option value=""" & rs("id") & """>" & _ rs("name") & "</option>") rs.movenext Loop
cnnID.close Set cnnID=Nothing Set rs=Nothing %> </select>
Når jeg så skal finde værdien af denne bruges denne:
<select name="ID_salesperson"> <%
StrSQL = "SELECT * FROM salesperson" Set rs = cnnID.Execute(strSQL)
Do While Not rs.eof if cstr(request.querystring("id")) = cstr(rs("id")) then Response.Write("<option value=""" & rs("name") & """ selected>" & _ rs("name") & "</option>") else Response.Write("<option value=""" & rs("name") & """>" & _ rs("name") & "</option>") end if rs.movenext Loop
cnnID.close Set rs=Nothing %>
Jeg tror problemet ligger i min Sql sætning, for der kommer intet ud når jeg forsøger at skrive din: response.write cstr(request.querystring("id")) &"="& cstr(rs("id")) - men jeg kan ikke helt overskue det..
Den eneste "fejl" jeg kan se, er at value=""" rs("name") måske skulle værevalue=""" rs("id") i den sidste.
Du skal kunne tjekke de 2 id'er. Prøv lige med denne:
<select name="ID_salesperson"> <% StrSQL = "SELECT * FROM salesperson" Set rs = cnnID.Execute(strSQL) Do While Not rs.eof response.write cstr(request.querystring("id")) &"="& cstr(rs("id")) if cstr(request.querystring("id")) = cstr(rs("id")) then ... ...
Så skulle der gerne stå noget, men du skal tjekke kildekoden i browseren (højerklik >> vis kildekode). Det kommer nemlig ikke ud på skærmen, da det er i et <select> element. Du kan måske se nogle af dem i dropdown boxen.
der er ingen personer med id 162. Hvis du prøvede med 316 eller 194 i stedet, vil det virke. Hvor kommer request.querystring("id") værdien fra. Det er der problemet ligger, da den er forkert.
så er jeg mere med :o) Du skal bruge 2 resultset's. En med bruger oplysninger (rs) og en med salspersoner (rsSale)
<select name="ID_salesperson"> <% StrSQL = "SELECT * FROM salesperson" Set rsSale = cnnID.Execute(strSQL)
Do While Not rsSale.eof if cstr(rsSale("id")) = cstr(rs("SalsPersonId")) then Response.Write("<option value=""" & rsSale("id") & """ selected>" & _ rsSale("name") & "</option>") else Response.Write("<option value=""" & rsSale("name") & """>" & _ rsSale("name") & "</option>") end if rsSale.movenext Loop cnnID.close Set rsSale=Nothing Set rs=Nothing %> </select>
ØV ØV, det virker stadig ikke.. Er ked af at jeg er sådan en spasser til det her.. Du kender ikke et godt sted hvor jeg kan læse noget mere og dette?? Eller eksempler på dette.
Nu får den kun værdien på hele siden, altså : edit.asp?id=162 - der ser således ud:
<select name="ID_salesperson"> <% StrSQL = "SELECT * FROM salesperson" Set rsSale = cnnID.Execute(strSQL)
Do While Not rsSale.eof if cstr(rsSale("id")) = cstr(rs("Id")) then Response.Write("<option value=""" & rsSale("id") & """ selected>" & _ rsSale("name") & "</option>") else Response.Write("<option value=""" & rsSale("name") & """>" & _ rsSale("name") & "</option>") end if rsSale.movenext Loop cnnID.close Set rsSale=Nothing Set rs=Nothing %> </select>
Du har en data tabel. Den går jeg udfra indeholder oplysninger om en bruger. Du har en salesperson tabel. Den går jeg ud fra indeholder en liste af salgs-personer. Jeg går også ud fra at en salgs-person er tilknyttet en bruger. Altså er der en kolonne i data tabellen som indeholder et id, som henviser til salgs-person.
Er alt dette korrekt???
Hvis det er, er det nemlig salgs-persons id'erne, der skal bruges i sammenligningen. Og ikke salgs-persons id'et og bruger id'et.
if cstr(rsSale("id")) = cstr(rs("salgs-persons id'et")) then
<select name="ID_salesperson"> <% StrSQL = "SELECT * FROM salesperson" Set rsSale = cnnID.Execute(strSQL)
Do While Not rsSale.eof if cstr(rsSale("id")) = cstr(rs("ID_salesperson")) then Response.Write("<option value=""" & rsSale("id") & """ selected>" & _ rsSale("name") & "</option>") else Response.Write("<option value=""" & rsSale("name") & """>" & _ rsSale("name") & "</option>") end if rsSale.movenext Loop cnnID.close Set rsSale=Nothing Set rs=Nothing %> </select>
Som jeg også sagde tidligere, handler det om at have 2 resultset's (tabeller med data fra databasen). En med bruger data fra data tabellen (den vi kalder rs) og en med alle salgspersonerne (den vi kalder rsSale)
HALLLLELUJA!!! Det virker, dog med en lille modifikation, så den sender id over i stedet:
<select name="ID_salesperson"> <% StrSQL = "SELECT * FROM salesperson" Set rsSale = cnnID.Execute(strSQL)
Do While Not rsSale.eof if cstr(rsSale("id")) = cstr(rs("ID_salesperson")) then Response.Write("<option value=""" & rsSale("id") & """ selected>" & _ rsSale("name") & "</option>") else Response.Write("<option value=""" & rsSale("id") & """>" & _ rsSale("name") & "</option>") end if rsSale.movenext Loop cnnID.close Set rsSale=Nothing Set rs=Nothing %> </select>
Men tusind tak - det er jeg sindsygt glad for at ha' løst, nu skal jeg bare videre.. MANGE MANGE TAK ;o)
Hey fennec, har lige et lille tillægsspørgsmål - hvad nu hvis jeg har en multiple choice box, her kan jeg godt hive en værdi ud, men ikke flere...
<select name="area1" multiple="multiple">
<% Set cnnID = Server.CreateObject("ADODB.Connection") cnnID.Open Application("DSN_dealer")
sql="SELECT * FROM Area1 ORDER BY Name" Set rsArea1=cnnID.execute(sql)
Do While Not rsArea1.eof if cstr(rsArea1("id")) = cstr(rs("Area1")) then Response.Write("<option value=""" & rsArea1("id") & """ selected>" & _ rsArea1("name") & "</option>") else Response.Write("<option value=""" & rsArea1("id") & """>" & _ rsArea1("name") & "</option>") end if rsArea1.movenext Loop
Set rsArea1=Nothing %> </select> </td><td valign="bottom"> <script language="JavaScript"> function selectAll(sel,tf) { for (i=0;i<sel.length;i++) { sel.options[i].selected = tf; } } </script> <input type="button" class="input" value=" Vælg alle til" onclick="selectAll(this.form.area1,true);" /><br><br> <input type="button" class="input" value="Vælg alle fra" onclick="selectAll(this.form.area1,false);" />
Har du et eller andet smart dertil.. Ellers virker det hele som en drøm :o)
Synes godt om
Ny brugerNybegynder
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.