0

Hi, I've got a DropDownList with a list of colours, when one is selected and the "Add to ShoppingCart" button is pressed, all the colours in the DropDownList are duplicated.

Can somebody please help.

// 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);

    }
5
Contributors
7
Replies
8
Views
7 Years
Discussion Span
Last Post by bhavu4u
0

Do not load data into dropdown when a page is posted back.

if(!IsPostBack) {
     //load data into dropdownlist
  }
0

You can also clear your list depending on how youre going to use it

DropDownList attributeValuesDropDown = new DropDownList();
attributeValuesDropDown.Clear();

This will clear it out each time it runs. The above method also works but if the list is created dynamically, it wont appear at all after the page loads. Clearing it ensures it will always be clean. The after submits query the submission.

0

Thanks for the replies, I tried the if(!IsPostBack), this just made the DropDownList disappear after the “Add to cart” button is pressed.

I tried attributeValuesDropDown.Clear(); as well, first it didn’t recognize the Clear() command so I used ClearSelection() which did not change anything.

0

Please post your complete code here. One more suggestion - Set EnableViewState property of DropDownList to false (do not use IsPostBack) or Invoke Clear() method of Items collection of dropdownlist. (DropDownList1.Items.Clear())

0

Hi, I've got a DropDownList with a list of colours, when one is selected and the "Add to ShoppingCart" button is pressed, all the colours in the DropDownList are duplicated.

Can somebody please help.

// 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);

    }

write poppulatecontrols function in If(!ispostback) if u already write in If(!ispostback) then add a line

attributeValuesDropDown .Items.clear()

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

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.