Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 360
  • Last Modified:

easy - option selected match recordset value to comma separated string

experts,

my question is how do i get option selected right when i'm comparing a comma separated string to an
integer value in a record set?  this is vbscript and asp.

strOne = "1,9,11,3,8,12" is a request value

iterating the recordset builds  a form like this

<form name="test">
<select multiple name="test">
<option value="1"> 1
<option value="3">3
<option value="7">7
<option value="8">8
<option value="11">11
<input type="submit" name="test" />
</form>

How do i detect whether a value in the string matches a value from the recordset and then
set the option selected to true?

TIA
0
altarEgo
Asked:
altarEgo
  • 2
  • 2
  • 2
  • +2
1 Solution
 
darksinclairCommented:
<SCRIPT>
var theValues = new Array();
function getSelectedValues( )
{
      for( i = 0; i < document.testFrm.testSlct.length; i++ )
      {
            for( j = 0; j < theValues.length; j++ )
            {
                  if( theValues[j] == document.testFrm.testSlct.options[i].value )
                  {
                        document.testFrm.testSlct.options[i].selected = true;
                  }
            }
      }
}
</SCRIPT>

<%
dim strOne
strOne = "1,9,11,3,8,12"
dim valuesArray
valuesArray = Split(strOne,",")
for i = 0 to UBound( valuesArray )
%>
      <SCRIPT>theValues.push( '<%=valuesArray(i)%>' );</SCRIPT>
<%
next
%>
<HTML>
<BODY onLoad="getSelectedValues();">
<form name="testFrm">
<select multiple name="testSlct">
<option value="1"> 1
<option value="3">3
<option value="7">7
<option value="8">8
<option value="11">11
<input type="submit" name="test" />
</form>
</BODY>
</HTML>

Try that on for size mate.. let me know if it swhat you rlooking for.  Basically I create an ASP array of all the values in your CSV string.. and then I loop through the array and make a javascript array.  Through Javascript you can easily compare the values in the select box and the array and check to see if the values are in there and select them if they are.


Cheers!
0
 
darksinclairCommented:
This was a fun one ^_^  made me use a lil bit of creativity.. probably not the most efficient since im kinda wasting an ASP array.. but it's the only thing I could think of.. I bet someone else will have somethinga little more ingenious to offer!
0
 
ThogekCommented:
Another possibility:

    <%
    Function IsInList(strList, strItem)
        IsInList = ( InStr(1, strList, "," & strItem & ",") <> 0 )
    End Function

    Function SelectedIfTrue(bln)
        If bln Then
            SelectedIfTrue = " selected"
        Else
            SelectedIfTrue = ""
        End If
    End Function


    strOne = "," & Request.QueryString("test") & ","
    %>

    <form name="test">
    <select multiple name="test">
        <option value="1"<%= SelectedIfTrue(IsInList(strOne, "1"))%>>1
        <option value="3"<%= SelectedIfTrue(IsInList(strOne, "3"))%>3
        <option value="7"<%= SelectedIfTrue(IsInList(strOne, "7"))%>7
        <option value="8"<%= SelectedIfTrue(IsInList(strOne, "8"))%>8
        <option value="11"<%= SelectedIfTrue(IsInList(strOne, "11"))%>11
    </select>
    <input type="submit" name="test" />
    </form>
0
Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

 
ThogekCommented:
Or:

    <%
    Function IsInList(strList, strItem)
        IsInList = ( InStr(1, strList, "," & strItem & ",") <> 0 )
    End Function

    Function SelectedIfTrue(bln)
        If bln Then
            SelectedIfTrue = " selected"
        Else
            SelectedIfTrue = ""
        End If
    End Function


    strOne = "," & Request.QueryString("test") & ","
    %>

    <form name="test">
    <select multiple name="test">
    <%
    strOptions = Array("1", "3", "7", "8", "11")
    For intOption = LBound(strOptions) to UBound(strOptions)
        Response.Write "<option value=""" & strOptions(intOption) & """" & SelectedIfTrue(IsInList(strOne, strOptions(intOption))) & ">1" & vbCrLf
    Next
    %>
    </select>
    <input type="submit" name="test" />
    </form>
0
 
ajitanandCommented:
My preffered way is to pass on the string processing and comparisons to the client side browser, through JavaScript using a generic re-usable function:


<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
<%
strOne = "1,9,11,3,8,12"' is a request value
%>
<form name="test">
<select multiple name="test">
      <option value="1"> 1
      <option value="3">3
      <option value="7">7
      <option value="8">8
      <option value="11">11
</select>
<input type="submit" name="btnSubmit" />
</form>
<SCRIPT LANGUAGE="JavaScript">
<!--
function setcombovalues(frm,fld,txt) {
      var f = document.forms[frm];
      txts = txt.split(",");
      f.elements[fld].selectedIndex = -1;
      for(j=0; j< txts.length; j++){
            txt = txts[j];
            if(txt != "")
                  for(i=0; i < f.elements[fld].options.length; i++)
                        if(f.elements[fld].options[i].value == txt)
                              f.elements[fld].options[i].selected = true;
      }
}

setcombovalues('test','test','<%= strOne %>');
//-->
</SCRIPT>
</BODY>
</HTML>
0
 
gladxmlCommented:
You can also try the code below...

<%
  Function setSelect(a,b)
  arrayRequest = Split(b,",")
  for i = LBound(arrayRequest) to UBound(arrayRequest)
  if trim(a) = trim(arrayRequest(i)) then
  setSelect = "selected"
  end if
  next
  end function
 %>
<form name="test">
<select multiple name="test">
<%
'assuming that your requestobject name is strOne
strOne  = Request.form("strOne")
%>
<option value="1"<%= setSelect("1",strOne) %>> 1
<option value="3"<%= setSelect("3",strOne) %>>3
<option value="7"<%= setSelect("7",strOne) %>>7
<option value="8"<%= setSelect("8",strOne) %>>8
<option value="11"<%= setSelect("11",strOne) %>>11
<input type="submit" name="test" />
</form>


Happy programming...
0
 
gladxmlCommented:
Ohh try to use this function instead to make it more efficient and faster... I forgot to put "exit for" if there is a match...

<%
  Function setSelect(a,b)
  arrayRequest = Split(b,",")
  for i = LBound(arrayRequest) to UBound(arrayRequest)
  if trim(a) = trim(arrayRequest(i)) then
  setSelect = "selected"
  exit for
  end if
  next
  end function
 %>

Happy programming...
0
 
ajitanandCommented:
One more point - The code I gave above works well with multiple select listboxes as well. And it is good for even listboxes with hundreds of entries efficiently as processing is done on the client side.
0
 
altarEgoAuthor Commented:
There are lots of ways to do this, I see.  This is what I came up with:

strOne = "1,9,11,3,8,12"
strOne = replace(strOne, ",", "$")
strOne = "$" & strOne & "$"
%>
<form name="test">
<select multiple name="test"><%

while rs.eof=FALSE
      strTemp = "$" & rs("response_seq") & "$"
%>
      <option value="<%= rs("response_seq")%>" <% if instr(strOne, strTemp) then response.write "SELECTED" end if %>><%= rs("response_name")%></OPTION><%
      rs.movenext
      wend %>
</select>
<input type="submit" name="test" />
</form>
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
  • 2
  • 2
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now