Проблемы с каскадным выпадающим списком и повторяющимися элементами
Привет, у меня есть проблема, что мои динамические выпадающие списки делают дубликаты элементов.
Я выбрал событие изменения, где я заполняю выпадающий список № 2 на основе того, что выбрано в выпадающем списке № 1. Но каждый раз, когда я заполняю его, он делает двойное содержание. И я думаю, что перепробовал все.
Код C#
SelectedIndexChanged
protected void ddl_SelectedIndexChanged(object sender, EventArgs e) { //PlaceHolder1.Controls.Clear(); XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("./xmlReBikeInfo/InfoBikeResponse.xml")); Table table = (Table)PlaceHolder1.FindControl("Table1"); if (table != null) { for (int i = 0; i < Rows; i++) { DropDownList ddl = (DropDownList)PlaceHolder1.FindControl("ddlBike_" + i + ""); //Use Request objects for getting the previous data of the dynamic textbox string biketype = ddl.SelectedValue; HiddenField hdnSize = (HiddenField)PlaceHolder1.FindControl("hdnSize_" + i + ""); DropDownList ddlSize = (DropDownList)PlaceHolder1.FindControl("ddlSize_" + i + ""); ddlSize.CssClass = "dropdown"; //ddlSize.SelectedValue = ""; ddlSize.Visible = true; TextBox txt = (TextBox)PlaceHolder1.FindControl("txtPrice_" + i + ""); HiddenField hdnCykelPris = (HiddenField)PlaceHolder1.FindControl("txtHdnCykelPris_" + i); HiddenField hdnAccPris = (HiddenField)PlaceHolder1.FindControl("txtHdnAccPris_" + i); string number1; string number2; XDocument xdoc = XDocument.Load(Server.MapPath("./xmlReBikeInfo/InfoBikeResponse.xml")); var bikeSizes = xdoc.Descendants("BikeType") .Where(x => x.Element("TypeName").Value == biketype) .SelectMany(x => x.Descendants("SizeName").Select(y => y.Value)) .ToList(); var bikePrice = xdoc.Descendants("BikeType") .Where(x => x.Element("TypeName").Value == biketype) .SelectMany(x => x.Descendants("TypePriceVat").Select(y => y.Value)) .ToList(); var bikeAcc = xdoc.Descendants("Accessorie") .Where(x => x.Element("AccessorieName").Value == biketype) .SelectMany(x => x.Descendants("AccessoriePriceVat").Select(y => y.Value)) .ToList(); decimal result = 0; if (biketype == "0") { txt.Text = ""; } if (biketype == "Touring") { foreach (string s in bikeSizes) { ddlSize.Items.Add(new ListItem(s + "")); } foreach (string p in bikePrice) { hdnCykelPris.Value = p.ToString(); string accPrice = ""; if (hdnAccPris.Value == "") { accPrice = "0"; } else { accPrice = hdnAccPris.Value; } number1 = hdnCykelPris.Value; number2 = accPrice.ToString(); result = decimal.Parse(number1) + decimal.Parse(number2); txt.Text = result.ToString(); //txt.Text = hdnCykelPris.Value; //litSum.Text = txt.Text; } ddlSize.Visible = true; } if (biketype == "Junior Bike") { foreach (string s in bikeSizes) { ddlSize.Items.Add(new ListItem(s + "")); } foreach (string p in bikePrice) { hdnCykelPris.Value = p.ToString(); string accPrice = ""; if (hdnAccPris.Value == "") { accPrice = "0"; } else { accPrice = hdnAccPris.Value; } number1 = hdnCykelPris.Value; number2 = accPrice.ToString(); result = decimal.Parse(number1) + decimal.Parse(number2); txt.Text = result.ToString(); //txt.Text = hdnCykelPris.Value; } } if (biketype == "MTB") { foreach (string s in bikeSizes) { ddlSize.Items.Add(new ListItem(s + "")); } foreach (string p in bikePrice) { hdnCykelPris.Value = p.ToString(); string accPrice = ""; if (hdnAccPris.Value == "") { accPrice = "0"; } else { accPrice = hdnAccPris.Value; } number1 = hdnCykelPris.Value; number2 = accPrice.ToString(); result = decimal.Parse(number1) + decimal.Parse(number2); txt.Text = result.ToString(); //txt.Text = hdnCykelPris.Value; } } if (biketype == "Classic E") { foreach (string s in bikeSizes) { ddlSize.Items.Clear(); ddlSize.Items.Add(new ListItem(s + "")); //ddlSize.ClearSelection(); } ddlSize.Visible = true; foreach (string p in bikePrice) hdnCykelPris.Value = p.ToString(); string accPrice = ""; if (hdnAccPris.Value == "") { accPrice = "0"; } else { accPrice = hdnAccPris.Value; } number1 = hdnCykelPris.Value; number2 = accPrice.ToString(); result = decimal.Parse(number1) + decimal.Parse(number2); txt.Text = result.ToString(); } }
Что я уже пробовал:
Не способ, метод очистки деталей перед заполнением.
И этот метод
public static void RemoveDuplicateItems(DropDownList ddl) { for (int i = 0; i < ddl.Items.Count; i++) { ddl.SelectedIndex = i; string str = ddl.SelectedItem.ToString(); for (int counter = i + 1; counter < ddl.Items.Count; counter++) { ddl.SelectedIndex = counter; string compareStr = ddl.SelectedItem.ToString(); if (str == compareStr) { ddl.Items.RemoveAt(counter); counter = counter - 1; } } } }