25. oktober 2002 - 11:44Der er
30 kommentarer og 2 løsninger
Markere checkboxe
Jeg nogle checkboxe der er dynamisk lavet, dertil har jeg en tabel i db hvor der er info om hvike checkboxe der skal markeres.
I db'en stå der f.eks. 1,2,5
Også skal checkbox nr. 1,2 og 5 hakkes af.
Hvordan gør man det?
Her er min kode:
<% strSQL = "Select * From udstyr" Set rts = Conne.Execute(strSQL) tal = 0 tallet = 0 t = 1 do while not rts.eof response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>" response.write "<td align=left width='50'>" minlinje = split(opslag("udstyr"),",") 'for i = tallet to ubound(minlinje) ' strsql = "select udstyrid from udstyr where udstyrid="&minlinje(i) ' Set rees = Conne.Execute(strSQL) ' if rees("udstyrid") = rts("udstyrid") then ' Response.Write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf ' exit for ' else response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf ' exit for ' end if 'next tallet = tallet + 1 tal = tal + 1 if tal = 4 then response.write "</tr><tr>" tal = 0 end if t = t + 1 rts.movenext loop
%>
Den "for" løkke der er udkommenteret er et forsøg der IKKE virker.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
<% strSQL = "Select * From udstyr" Set rts = Conne.Execute(strSQL) tal = 0 tallet = 0 t = 1 do while not rts.eof response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>" response.write "<td align=left width='50'>" minlinje = split(opslag("udstyr"),",") 'for i = tallet to ubound(minlinje) ' strsql = "select udstyrid from udstyr where udstyrid="&minlinje(i) ' Set rees = Conne.Execute(strSQL) ' if rees("udstyrid") = rts("udstyrid") then rs.MoveNext() ' Response.Write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf ' exit for ' else response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf ' exit for ' end if 'next tallet = tallet + 1 tal = tal + 1 if tal = 4 then response.write "</tr><tr>" tal = 0 end if t = t + 1 rts.movenext loop
%>
-vil mene du mangler en MoveNext() på dit recordset....
-hvis ikke det er rigtigt, så kigger jeg lige på det når jeg kommer hjem lidt senere i dag...
Med denne kode bliver kun den første valgte box hakket af:
<% strSQL = "Select * From udstyr" Set rts = Conne.Execute(strSQL) tal = 0 tallet = 0 t = 1 minlinie = "" if opslag("udstyr") <> "" then minlinje = split(opslag("udstyr"),",") end if do while not rts.eof for i = tallet to ubound(minlinje) response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>" response.write "<td align=left width='50'>" strsql = "select udstyrid from udstyr where udstyrid="&minlinje(i) Set rees = Conne.Execute(strSQL) if rees("udstyrid") = rts("udstyrid") then Response.Write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf else response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf exit for end if tallet = tallet + 1 tal = tal + 1 if tal = 4 then response.write "</tr><tr>" tal = 0 end if t = t + 1 rts.movenext next rts.movenext loop %>
<% <% strSQL = "Select * From udstyr" Set rts = Conne.Execute(strSQL) tal = 0 tallet = 0 t = 1 minlinie = "" if opslag("udstyr") <> "" then minlinje = split(opslag("udstyr"),",") lngLength = Len(minlinje) -1 minlinje = Left(minlinje,lngLength) end if do while not rts.eof for i = tallet to ubound(minlinje) response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>" response.write "<td align=left width='50'>" strsql = "select udstyrid from udstyr where udstyrid="&minlinje(i) Set rees = Conne.Execute(strSQL) if rees("udstyrid") = rts("udstyrid") then Response.Write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf else response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf exit for end if tallet = tallet + 1 tal = tal + 1 if tal = 4 then response.write "</tr><tr>" tal = 0 end if t = t + 1 rts.movenext next rts.movenext loop %> %>
Sorry, jeg har været optaget af en hel masse andet. Jeg havde derfor totalt glemt dette spg. :(
Rune, dit forslag virker desværre ikke.
Her er min nuvændende kode:
<% minlinie = "" udstyridet = "" strSQL = "Select * From udstyr" Set rts = Conne.Execute(strSQL) tal = 0 t = 1 if opslag("udstyr") <> "" then minlinje = split(opslag("udstyr"),",") end if do while not rts.eof for i = 0 to ubound(minlinje) udstyridet = minlinje(i) if rts.eof then exit for end if response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>" response.write "<td align=left width='50'>" response.write udstyridet response.write rts("udstyrid") if udstyridet = rts("udstyrid") then Response.Write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf else response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf 'exit for end if tal = tal + 1 if tal = 4 then response.write "</tr><tr>" tal = 0 end if t = t + 1 if rts.eof then exit for end if rts.movenext next if rts.eof then exit do end if rts.movenext loop %>
Som du kan se, har jeg lavet response.write'r i for løkken. Resultatet er ret interessant:
ABS 11 X Airbag 22 X Automatgear 33 X Alufælge 15 X
X'et er checkboxe det første tal er "udstyridet" - dvs. den splittede streng det andet tal er "rts("udstyrid")" - dvs. id fra udstyr tabellen
Som du kan se loop'er(i mangel af et bedre ord) den splittede streng og starter forfra.
Jeg lavet lidt om på koden, så den nu udskriver de boxe der er hak i og kun dem(dog uden hak i).
Jeg har indsnævret problemet til denne if sætning: test = rts("udstyrid") if udstyridet = test then Response.Write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf else response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf end if
"else" delen bliver altid udført. Det vil, for mig, sige at den ikke kan lide sammenligningen mellem udstyrid(test), som er autonummer, og udstyridet, som er den splittede streng.
Kan problemmet ligge i at strengen er ansat for at være bogstaver og ikke tal? Hvis ja, hvordan laver man den om?
<% minlinie = "" udstyridet = "" strSQL = "Select * From udstyr" Set rts = Conne.Execute(strSQL) tal = 0 t = 1 if opslag("udstyr") <> "" then minlinje = split(opslag("udstyr"),",") end if for i = 0 to ubound(minlinje) udstyridet = minlinje(i) if rts.eof then exit for end if response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>" response.write "<td align=left width='50'>" response.write udstyridet response.write rts("udstyrid") test = rts("udstyrid") if udstyridet = CInt(test) then Response.Write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf else response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf 'exit for end if tal = tal + 1 if tal = 4 then response.write "</tr><tr>" tal = 0 end if t = t + 1 if rts.eof then exit for end if rts.movenext next %>
:) Tænker du på "ABS"? det er bare navnet - det kommer ud et andet sted: response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>"
"Hmm prøv lige at udskriv variablerne udstyridet og udstyrid!"
Det er jo det jeg gør. Først kommer navnet (ABS), så kommer udstyridet (1), så kommer rts("udstyrid") (1) og til sidst komme selve checkboxen (X)
Jeg har en bil. Den bil har noget udstyr. Det udstyr er valgt ud fra nogle checkboxe på min "opretbil" side. Udstyret kommer fra databasen. I databasen er der en tabel med udstyr. I den tabel er der to(2) kolonner: "udstyrid"(autonummer) og "unavn"(tekst). I min biltabel er der en kolonne med udstyr: "udstyr"(tekst) På min "retbil" side vil jeg gerne de samme checkboxe markeret, som dem der blev markeret da bilen blev oprettet.
I øjeblikket bliver checkboxene på "opretbil" siden lavet på denne måde:
Skriv navn på udstyr. Lav en checkbox med navnet "box" + udstyrid.
Kode:
<% strSQL = "Select * From udstyr" Set rts = Conn.Execute(strSQL) tal = 0 t = 1 do while not rts.eof response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td><td align=left width='50'><input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf tal = tal + 1 if tal = 4 then response.write "</tr><tr>" tal = 0 end if t = t + 1 rts.movenext loop %>
Der laves derefter en kommasepareret tekst streng af de markerede chechboxe.
Kode:
strwSQL = "" boxe = "" strwSQL = "select * from udstyr" set res = Conne.execute(strwSQL) do while not res.eof if upload.Form("box"&res("udstyrid")) <> "" then boxe = boxe & res("udstyrid") & "," end if res.movenext loop if not boxe = "" then boxe = left(boxe, len(boxe) -1) end if
Er det så her du vil ha' en validering på hvilke checkboxe der skal være checked?
<% strSQL = "Select * From udstyr" Set rts = Conn.Execute(strSQL) tal = 0 t = 1 do while not rts.eof response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td><td align=left width='50'><input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf tal = tal + 1 if tal = 4 then response.write "</tr><tr>" tal = 0 end if t = t + 1 rts.movenext loop %>
Jeg syntes at ovenstående ser lidt for beværligt ud i hht. at den bare skal checke nogle checkboxe af !, glem dog alt om splitfunktioner o.s.v, løsningen er lige foran næsen...
Det skal dog nævnes at jeg ikke ved om opslaget virkelig hedder opslag!
men for at få nedenstående til at virke let indsætter du bare en variabel der hedder :
opslag = rts("udtræk")
koden :
<% strSQL = "Select * From udstyr" Set rts = Conn.Execute(strSQL) tal = 0 tallet = 0 t = 1
do while not rts.eof response.write "<td width='40'><font face='arial,helvetica' size='1'>"&rts("unavn")&"</td>" response.write "<td align=left width='50'>"
if (inStr(opslag, t)) Then response.write "<input type='checkbox' checked name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf else response.write "<input type='checkbox' name='box"&rts("udstyrid")&"' size='15'></td>" & vbcrlf End If
tallet = tallet + 1 tal = tal + 1 if tal = 4 then response.write "</tr><tr>" tal = 0 end if t = t + 1 rts.movenext
loop
%>
ovenstående er testet med en variabel der ser sådan ud :
opslag = "1,3,5"
God fonøjelse, og håber at jeg har forstået rigtigt, ellers skal jeg punkes *G*
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.