Member 13863605 Ответов: 1

Добавьте опцию "Все" в список и измените ее динамически на основе выбора в раскрывающемся списке в разделе ASP.NET


I have a drop down list with names of countries and a list box with different types of season like summer, winter etc In ASP.Net and both of them gets updated from a table in my database in the page_load event. During the Page_load event my drop down list and list box gets updated with all the available countries and seasons present in the table in the database. My list box changes dynamically after the country is selected in my drop down list. For example, if I choose USA, then season would change dynamically like fall, winter, summer. Right now it works perfectly. The only thing I want is to add an "ALL" option at the top of my list box if a country is selected which has all the seasons. For example if I choose country "X" in my drop down list and it has all the weathers present in my database, the list box would have an "ALL" option at the top. Basically the "ALL" option would pop up only when all the seasons during the page_load event matches the seasons after a country is selected.

Что я уже пробовал:

Я попытался получить общее количество списка после того, как моя страница загрузилась в первый раз, как это
protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                 
                int countListBox = lb.Items.Count;  
            }

        }


protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
        {
                       
            if (lb.Items.Count == countListBox)
            {
                lb.Items.Insert(0, "All");
            }
        }

Gerry Schmitz

Я продолжаю читать и все еще не "понимаю". В чем смысл "всего"? В каждой стране есть "4 сезона", идет ли снег или нет.

Если "сезон" означает что-то еще, то просто добавьте несколько дополнительных столбцов (bool) в "список", чтобы указать "x сезон присутствует" (или что-то еще).

Member 13863605

Я хочу добавить "все". Это обязательное условие. Не имеет значения, есть ли в каждой стране четыре сезона или нет. У нас во многих азиатских странах есть шесть сезонов, поэтому все страны не обязательно имеют четыре сезона.

Vincent Maverick Durano

Но как определить, все ли сезоны связаны с той или иной страной? У вас есть что-то вроде флага в базе данных, чтобы определить это?

1 Ответов

Рейтинг:
2

David_Wimbley

Эхо того, что сказал Винсент. Если вам не нужен гигантский оператор if/switch, вам понадобится таблица стран и флаг на этой таблице, давайте назовем ее hasallseasons.

Затем в выбранном вами событии изменения индекса вам нужно будет узнать, какая страна была выбрана, запросить базу данных, чтобы решить, есть ли в этой стране все сезоны, а затем добавить "все" в свой список.

Псевдокод.

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
        {
            var countryName = "FRANCE";
            var countryQuery = SELECT TOP 1 FROM Countries WHERE CountryName = countryName;
            var hasAllSeasons = countryQuery.FirstOrDefault().HasAllSeasons;

//  lb.Items.Count == countListBox Im not sure the purpose of this bit so i've taken it out.
            if (hasAllSeasons)
            {
                lb.Items.Insert(0, "All");
            }
        }


Для меня это самый простой маршрут, иначе вам придется изменить запрос DB для оператора switch.


protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
        {
            var countryName = "FRANCE";
            var hasAllSeasons = false;

            switch(countryName)
            {
              case "FRANCE": 
              case "GERMANY": 
              case "RUSSIA": 
              case "CHINA": 
              case "JAPAN": 
               hasAllSeasons = true;
               break;
              case "ENGLAND":
              case "VIETNAME":
              case "SOUTH KOREA":
              case "CAMBODIA":
               hasAllSeasons= false;
               break;
            }
            
//  lb.Items.Count == countListBox Im not sure the purpose of this bit so i've taken it out.
            if (hasAllSeasons)
            {
                lb.Items.Insert(0, "All");
            }
        }


Как вы можете видеть, подход switch statement жестко закодирован и может быть довольно длительным, я лично пошел бы по маршруту DB.

Независимо от вашего подхода, вам придется где-то определить, какие страны имеют все сезоны (я не вижу, чтобы вы указывали, что это делается в вашем вопросе), иначе нет никакой логики, чтобы определить, какие страны имеют все сезоны, а какие страны не имеют всех сезонов.


Vincent Maverick Durano

хорошо сказано. 5ed!