Solved

ASP Multiple Select List Box

Posted on 2011-09-08
11
369 Views
Last Modified: 2012-05-12
Hello,

I am using an HTML Listbox control in my ASP page. I am using it with "Allow
Multiple Selections" option set to true.

Now on my EDIT page I am unsure how to within a listbox display all of the options that have been selected?

At present my code just selects the first?

Here it is -

<select name="category" size="8" multiple="multiple" id="category">
  <option value="" <%If (Not isNull((RsSelectedCategories.Fields.Item("ID").Value))) Then If ("" = CStr((RsSelectedCategories.Fields.Item("ID").Value))) Then Response.Write("selected=""selected""") : Response.Write("")%>></option>
  <%
While (NOT RsCategoriesOptions.EOF)
%>
  <option value="<%=(RsCategoriesOptions.Fields.Item("ID").Value)%>" <%If (Not isNull((RsSelectedCategories.Fields.Item("ID").Value))) Then If (CStr(RsCategoriesOptions.Fields.Item("ID").Value) = CStr((RsSelectedCategories.Fields.Item("ID").Value))) Then Response.Write("selected=""selected""") : Response.Write("")%> ><%=(RsCategoriesOptions.Fields.Item("Category-label").Value)%></option>
  <%
  RsCategoriesOptions.MoveNext()
Wend
If (RsCategoriesOptions.CursorType > 0) Then
  RsCategoriesOptions.MoveFirst
Else
  RsCategoriesOptions.Requery
End If
%>

Do i need extra loop in here?

Thank you
</select>

Open in new window

0
Comment
Question by:garethtnash
  • 7
  • 4
11 Comments
 
LVL 15

Expert Comment

by:pateljitu
Comment Utility
Please try this, it is not the most elegant way though:

<select name="category" size="8" multiple="multiple" id="category">
  <option value="" <%If (Not isNull((RsSelectedCategories.Fields.Item("ID").Value))) Then If ("" = CStr((RsSelectedCategories.Fields.Item("ID").Value))) Then Response.Write("selected=""selected""") : Response.Write("")%>></option>
  <%
While (NOT RsCategoriesOptions.EOF)

    While (NOT RsSelectedCategories.EOF)
%>
  <option value="<%=(RsCategoriesOptions.Fields.Item("ID").Value)%>" <%If (Not isNull((RsSelectedCategories.Fields.Item("ID").Value))) Then If (CStr(RsCategoriesOptions.Fields.Item("ID").Value) = CStr((RsSelectedCategories.Fields.Item("ID").Value))) Then Response.Write("selected=""selected""") : Response.Write("")%> ><%=(RsCategoriesOptions.Fields.Item("Category-label").Value)%></option>
  <%
    RsSelectedCategories.MoveNext()
  wend
 
  RsCategoriesOptions.MoveNext()
Wend

If (RsCategoriesOptions.CursorType > 0) Then
  RsCategoriesOptions.MoveFirst
Else
  RsCategoriesOptions.Requery
End If
%>
0
 

Author Comment

by:garethtnash
Comment Utility
Hi Pateljitu, sorry no joy, it just repeats the

RsSelectedCategories Option  three times (I know that there are 3 records here)

I can't see the other

RsCategoriesOptions Options;

For clarity

RsCategoriesOptions Options; are the original options
RsSelectedCategories are the selected options

Thanks in advance -

 
0
 
LVL 15

Expert Comment

by:pateljitu
Comment Utility
Please try this:

<select name="category" size="8" multiple="multiple" id="category">
  <option value="" <%If (Not isNull((RsSelectedCategories.Fields.Item("ID").Value))) Then If ("" = CStr((RsSelectedCategories.Fields.Item("ID").Value))) Then Response.Write("selected=""selected""") : Response.Write("")%>></option>
  <%
While (NOT RsCategoriesOptions.EOF)
%>
    <option value="<%=(RsCategoriesOptions.Fields.Item("ID").Value)%>"
<%    
        do While NOT RsSelectedCategories.EOF

            If (Not isNull((RsSelectedCategories.Fields.Item("ID").Value))) Then
                If (CStr(RsCategoriesOptions.Fields.Item("ID").Value) = CStr((RsSelectedCategories.Fields.Item("ID").Value))) Then
                    Response.Write("selected=""selected""")
                    exit do
                end if
            End if        
     
        RsSelectedCategories.MoveNext()
        loop
 %>
    ><%=(RsCategoriesOptions.Fields.Item("Category-label").Value)%></option>
 <%
 
  RsCategoriesOptions.MoveNext()
Wend

If (RsCategoriesOptions.CursorType > 0) Then
  RsCategoriesOptions.MoveFirst
Else
  RsCategoriesOptions.Requery
End If
%>
0
 

Author Comment

by:garethtnash
Comment Utility
Close,

that gives me all of the products that were previously selected, butt none of the other options?

Almost there - I think?
0
 
LVL 15

Expert Comment

by:pateljitu
Comment Utility
You mean not all records from recordset "RsCategoriesOptions" are getting displayed.
0
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 

Author Comment

by:garethtnash
Comment Utility
thats correct
0
 

Author Comment

by:garethtnash
Comment Utility
none of the unselected ones
0
 
LVL 15

Accepted Solution

by:
pateljitu earned 500 total points
Comment Utility
Should work, try this also if there is issue with this code comment line "exit do" and try again:


<select name="category" size="8" multiple="multiple" id="category">
  <option value="" <%If (Not isNull((RsSelectedCategories.Fields.Item("ID").Value))) Then If ("" = CStr((RsSelectedCategories.Fields.Item("ID").Value))) Then Response.Write("selected=""selected""") : Response.Write("")%>></option>
  <%
While (NOT RsCategoriesOptions.EOF)
%>
    <option value="<%=(RsCategoriesOptions.Fields.Item("ID").Value)%>"
<%    
        do While NOT RsSelectedCategories.EOF

            If (Not isNull((RsSelectedCategories.Fields.Item("ID").Value))) Then
                If (CStr(RsCategoriesOptions.Fields.Item("ID").Value) = CStr((RsSelectedCategories.Fields.Item("ID").Value))) Then
                    Response.Write(" selected=""selected"" ")
                    exit do
                end if
            End if        
     
        RsSelectedCategories.MoveNext()
        loop
 %>
    ><%=(RsCategoriesOptions.Fields.Item("Category-label").Value)%></option>
 <%
 
  RsCategoriesOptions.MoveNext()
Wend

'If (RsCategoriesOptions.CursorType > 0) Then
'  RsCategoriesOptions.MoveFirst
'Else
'  RsCategoriesOptions.Requery
'End If
%>
</select>
0
 

Author Comment

by:garethtnash
Comment Utility
Hi Pateljitu,

That is fantastic thank you - the following works a treat --

<select name="category" size="4" multiple="multiple" id="category">
  <%
While (NOT RsCategoriesOptions.EOF)
%>
    <option value="<%=(RsCategoriesOptions.Fields.Item("ID").Value)%>"
<%    
        do While NOT RsSelectedCategories.EOF

            If (Not isNull((RsSelectedCategories.Fields.Item("ID").Value))) Then
                If (CStr(RsCategoriesOptions.Fields.Item("ID").Value) = CStr((RsSelectedCategories.Fields.Item("ID").Value))) Then
                    Response.Write(" selected=""selected"" ")
                    exit do
                end if
            End if        
     
        RsSelectedCategories.MoveNext()
        loop
 %>
    ><%=(RsCategoriesOptions.Fields.Item("Category-label").Value)%></option>
 <%
 
  RsCategoriesOptions.MoveNext()
Wend
%>
</select>

Open in new window


Thank you
0
 

Author Closing Comment

by:garethtnash
Comment Utility
First Class - thank you
0
 

Author Comment

by:garethtnash
Comment Utility
Hi Pateljitu,

Sorry to trouble you, I've tried using your logic on another select box with multiple options on the page but to no joy, would you mind having a look please --

<%
Dim RsRelatedProductOptions__MMColParam
RsRelatedProductOptions__MMColParam = "0"
If (Request("ID") <> "") Then 
  RsRelatedProductOptions__MMColParam = Request("ID")
End If
%>
<%
Dim RsRelatedProductOptions
Dim RsRelatedProductOptions_cmd
Dim RsRelatedProductOptions_numRows

Set RsRelatedProductOptions_cmd = Server.CreateObject ("ADODB.Command")
RsRelatedProductOptions_cmd.ActiveConnection = MM_GolfConnection_STRING
RsRelatedProductOptions_cmd.CommandText = "SELECT ID, [Product-Name] FROM dbo.[Direct-Product] WHERE [Display-TGI-Direct] = 'Y' AND ID <> ? ORDER BY [Product-Name]" 
RsRelatedProductOptions_cmd.Prepared = true
RsRelatedProductOptions_cmd.Parameters.Append RsRelatedProductOptions_cmd.CreateParameter("param1", 5, 1, -1, RsRelatedProductOptions__MMColParam) ' adDouble

Set RsRelatedProductOptions = RsRelatedProductOptions_cmd.Execute
RsRelatedProductOptions_numRows = 0
%>
<%
Dim RsRelated__MMColParam
RsRelated__MMColParam = "0"
If (Request("ID") <> "") Then 
  RsRelated__MMColParam = Request("ID")
End If
%>
<%
Dim RsRelated
Dim RsRelated_cmd
Dim RsRelated_numRows

Set RsRelated_cmd = Server.CreateObject ("ADODB.Command")
RsRelated_cmd.ActiveConnection = MM_GolfConnection_STRING
RsRelated_cmd.CommandText = "Select  R.RelatedProductID as ID from dbo. [Direct-Related-Products] R  where R.ProductID = ?" 
RsRelated_cmd.Prepared = true
RsRelated_cmd.Parameters.Append RsRelated_cmd.CreateParameter("param1", 5, 1, -1, RsRelated__MMColParam) ' adDouble

Set RsRelated = RsRelated_cmd.Execute
RsRelated_numRows = 0
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<select name="category" size="4" multiple="multiple" id="category">
  <%
While (NOT RsRelatedProductOptions.EOF)
%>
    <option value="<%=(RsRelatedProductOptions.Fields.Item("ID").Value)%>"
<%    
        do While NOT RsRelated.EOF

            If (Not isNull((RsRelated.Fields.Item("ID").Value))) Then
                If (CStr(RsRelatedProductOptions.Fields.Item("ID").Value) = CStr((RsRelated.Fields.Item("ID").Value))) Then
                    Response.Write(" selected=""selected"" ")
                    exit do
                end if
            End if        
     
        RsRelated.MoveNext()
        loop
 %>
    ><%=(RsRelatedProductOptions.Fields.Item("Product-Name").Value)%></option>
 <%
 
  RsRelatedProductOptions.MoveNext()
Wend
%>
</select>
</body>
</html>
<%
RsRelatedProductOptions.Close()
Set RsRelatedProductOptions = Nothing
%>
<%
RsRelated.Close()
Set RsRelated = Nothing
%>

Open in new window


The page in question is here

For the ID value 39 --

this ;

Select  R.RelatedProductID as ID from dbo. [Direct-Related-Products] R  where R.ProductID = 39

Produces the following results -

ID
16
17
18
19

this; SELECT ID, [Product-Name] FROM dbo.[Direct-Product] WHERE [Display-TGI-Direct] = 'Y' AND ID <> 39 ORDER BY [Product-Name]

Produces the following results -

ID      Product-Name
40      final Test Hopefully &#163;&#163;$
16      Product1
17      Product2
18      Product3
19      Product4

So Products 1 - 4 should be highlighted, but are not...

Please advise.

Many thanks



0

Featured Post

Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

Join & Write a Comment

Deploying a Microsoft Access application in a Citrix environment is not difficult but takes a few steps. However, Citrix system people are often of little help, as they typically know next to nothing about Access. The script provided here will take …
This article explains how to prepare an HTML email signature template file containing dynamic placeholders for users' Azure AD data. Furthermore, it explains how to use this file to remotely set up a department-wide email signature policy in Office …
In this tutorial viewers will learn how to style transparent/translucent elements using alpha transparency in CSS Start with a normal styled element, such as a div.: Define its "background-color" property as "rgba (255, 255, 255, .5): The numbers in…
In this tutorial viewers will learn how to embed an audio file in a webpage using HTML5. Ensure your DOCTYPE declaration is set to HTML5: : The declaration should display (CODE) HTML5 is supported by the most recent versions of all major browsers…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now