Click here to Skip to main content
15,897,371 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi, I've got a DropDownList with a list of colours, when one is selceted and the "Add to Cart" button is pressed, the colours in the DropDownList duplicate.

Can anyone please help me?

// fill the control with data
    private void PopulateControls(ProductDetails pd)
    {
            // display product recommendations
        string productId = pd.ProductId.ToString();
        recommendations.LoadProductRecommendations(productId);
   
            // display the product details
        titleLabel.Text = pd.Name;
        descriptionLabel.Text = pd.Description;
        priceLabel.Text = String.Format("{0:c}", pd.Price);
        productImage.ImageUrl = "ProductImages/" + pd.Image2FileName;
            // set the title of the page
        this.Title = BalloonShopConfiguration.SiteName + pd.Name;

            // obtain the attributes of the product
        DataTable attrTable = CatalogAccess.GetProductAttributes(productId);

            // temp variables
        string prevAttributeName = "";
        string attributeName, attributeValue, attributeValueId;

            // current DropDown for attribute values
        Label attributeNameLabel;
        DropDownList attributeValuesDropDown = new DropDownList();

            // read the list of attributes
        foreach (DataRow r in attrTable.Rows)
        {
                // get attribute data
            attributeName = r["AttributeName"].ToString();
            attributeValue = r["AttributeValue"].ToString();
            attributeValueId = r["AttributeValueID"].ToString();

                // if starting a new attribute (e.g. Color, Size)
            if (attributeName != prevAttributeName)
            {
                prevAttributeName = attributeName;
                attributeNameLabel = new Label();
                attributeNameLabel.Text = attributeName + ": ";
                attributeValuesDropDown = new DropDownList();
                attrPlaceHolder.Controls.Add(attributeNameLabel);
                attrPlaceHolder.Controls.Add(attributeValuesDropDown);
            }
                // add a new attribute value to the DropDownList
            attributeValuesDropDown.Items.Add(new ListItem(attributeValue, attributeValueId));
        }
    }

    protected void AddToCartButton_Click(object sender, EventArgs e)
    {
            // Retrieve ProductID from the query string
        string productId = Request.QueryString["ProductID"];

            // Retrieve the selected product options
        string options = "";
        foreach (Control cnt in attrPlaceHolder.Controls)
        {
            if (cnt is Label)
            {
                Label attrLabel = (Label)cnt;
                options += attrLabel.Text;
            }

            if (cnt is DropDownList)
            {
                DropDownList attrDropDown = (DropDownList)cnt;
                options = attrDropDown.Items[attrDropDown.SelectedIndex].Value;
            }
        }

        // Add the product to the shopping cart
        ShoppingCartAccess.AddItem(productId, options);

    }
Posted

Looks like you are populating the dropdown control again.

You need to by-pass it when the page reloads in order to execute AddToCartButton_Click handler.
 
Share this answer
 
Thanks for the reply, could you please show me how to by pass it?
 
Share this answer
 
Bease you've put this...

attributeValuesDropDown.Items.Add(new ListItem(attributeValue, attributeValueId));


...statement in a foreach loop which runs through each item exists in cart everytime a new item has to be added in list.

So all previous items will get filled in again and the new only once.

I suggest to use this stement before the statement of filling...

attributeValuesDropDown.Items.Clear()


... however this is unnecessary clearing of all items exists in dropdown list before adding all the same once again. But it will eliminate your issue.

Otherwise you need to apply some logic through which you don't have to put this statement in loop...

Good Luck!
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900