I have seen merchants do this by using the subproduct feature and using a custom template to display the subproducts in a pull down menu or ask radio buttons. An example of both of these options are below.
subproducts in a pull down menu:
http://www.cdrackshoppe.com/PD9920K.html
subproducts displayed as radio button options:
http://www.thepurplearmadillo.com/store ... enter.html
By setting up subproducts and having the subproducts displayed in the cart you can have a different product added to the cart depending on the option that the customer selected. This would allow you have downloads assigned to different items in the pull down menu so that the customer gets the correct download that they wanted.
To set this up you would first create a parent product which has all of the information you would like displayed on the page such as the product name, graphic and description. Next you would create subproducts for the various options that you would like listed in your pull down menu. For example if your parent product was a CD you might name your subproducts, 'CD - Download' and 'CD - hard copy.' You can then go to Products > CD > Select Subproducts and select the two subproducts.
Next you need to setup the custom template. Below is the code for a basic product template which would display your subproducts in a pull down menu. You can go to Merchandising > Custom Templates > Page/Product > New Template, and name a new custom template whatever you want. After you name the template you can copy and paste the below code into the template. Last you will need to go to Products > CD > Edit Product Layout and select your template for this product.
----------------------------------------
[-- DEFINE SUBPRODUCT --]
# A subproduct in this template is just an option for a pull down list
# Note1: Field1 is used to hold the name used for the pull down list
# such as "Brown, Size 8" instead of the actual name which
# might be "Wing Tip - Brown, Size 8".
# Note2: In order to turn off the master:subproduct naming feature used
# by ShopSite's shopping cart place
# cross_sell: checked
# in the sbdata.aa file found in the data directory
[--IF PRODUCT.SaleOn--]
<option value="[--PRODUCT.RECORDNUMBER--]">[--PRODUCT.Name--] [-- PRODUCT.SaleAmount --]</option>
[-- ELSE --]
<option value="[--PRODUCT.RECORDNUMBER--]">[--PRODUCT.Name--] [-- PRODUCT.PRICE --]</option>
[-- END_IF --]
[-- END_DEFINE SUBPRODUCT --]
[-- DEFINE PRODUCT --]
<CENTER>
########################
# PRODUCT GRAPHIC #
########################
[-- INCLUDE Product-Graphic PROCESS --]
########################
# PRODUCT NAME #
########################
[-- INCLUDE Product-Name PROCESS --]
########################
# PRODUCT SKU #
########################
[-- INCLUDE Product-Sku PROCESS --]
########################
# PRODUCT DESCRIPTION #
########################
[-- INCLUDE Product-Description PROCESS --]
<br>
########################
# SUBPRODUCTS #
########################
[-- IF product.subproduct --]
<form action="[-- SHOPPING_CART_URL BASE --]/order.cgi" method=post>
<input type=hidden name=storeid value=[--Store.id--]>
<input type=hidden name=dbname value=products>
<input type=hidden name=function value=add>
<TABLE>
<TR><TD>
<SELECT name=itemnum>
[-- LOOP SUBPRODUCTS --]
[-- SUBPRODUCTS --]
[-- END_LOOP SUBPRODUCTS --]
</SELECT></TD><TD>
########################
# ADD TO CART #
########################
<input type=image src="[-- OUTPUT_DIRECTORY_URL --]/media/add_to_cart.gif" width=83 height=20 alt="add_to_cart.gif" hspace=3 vspace=3 border=0 align="bottom" name="Add to Cart" alt="Add to Cart">
<input type=image src="[-- OUTPUT_DIRECTORY_URL --]/media/view_cart.gif" width=71 height=20 alt="view_cart.gif" hspace=3 vspace=3 border=0 align="bottom" name="View Cart" alt="View Cart">
</TD></TR></TABLE>
</form>
[-- ELSE --]
# Need to treat as regular product
[-- END_IF --]
</CENTER>
[-- END_DEFINE PRODUCT --]
----------------------------------------
-Lauren