Как заполнить зависимый список флажков в С#

У меня есть три зависимых списка флажков. 1. Страны 2. Штаты 3. Города Я хочу перечислить все Штаты, если конкретная Страна выбрана в списке флажков Страны. Точно так же, если я выберу любой штат, соответствующие города должны быть заполнены в списке флажков городов.

I have created separate functions for States for every Country and calling them with the following code:

private void Country_SelectedIndexChanged(object sender, EventArgs e)
        {

            foreach (string s in Country.CheckedItems)
            {
                if (Country.CheckedItems.Contains("US"))
                {
                    US_States_Checked();
                }

                if (Country.CheckedItems.Contains("Canada"))
                {
                    Canada_States_Checked();
                }

            }


        }

public void Canada_States_Checked()
        {
            string[] canada_states = new string[12];
            canada_states[0] = "Alberta";
            canada_states[1] = "British Columbia";
            canada_states[2] = "Manitoba";
            canada_states[3] = "New Brunswick";
            canada_states[4] = "Newfoundland and Labrador";
            canada_states[5] = "Northwest Territories";
            canada_states[6] = "Nova Scotia";
            canada_states[7] = "Ontario";
            canada_states[8] = "Prince Edward Island";
            canada_states[9] = "Quebec";
            canada_states[10] = "Saskatchewan";
            canada_states[11] = "Yukon Territory";

            State.Items.AddRange(canada_states);
        }

У меня следующие проблемы: 1. Какое свойство используется для определения, когда флажок снят? 2. Как проверить название выбранного штата/страны и проверить, отмечен он или нет? Что-то вроде:

if(country.selectedItem.Equals("US") and country.selectedItem is unchecked....)) {
.......
} 
  1. Как удалить/очистить определенные штаты/города, когда страна не отмечена флажком, имея в виду, что она не должна удалять штаты какой-либо другой страны, перечисленные в списке флажков штатов?

Задача простая, но немного каверзная.

Спасибо


person Nabeeha Deedar    schedule 07.05.2015    source источник
comment
во-первых, это для Winform или WPF? тогда лучшим решением будет использование объекта, содержащего страну и штат/провинцию. это позволит вам удалить из списка штатов все штаты, значение страны которых вы не отметили.   -  person Franck    schedule 07.05.2015
comment
Я использую форму Windows. Я все еще не мог понять, как проверить, не установлен ли флажок внутри списка флажков? Можете ли вы предоставить какую-либо ссылку в качестве примера? Спасибо   -  person Nabeeha Deedar    schedule 07.05.2015


Ответы (1)


Отдельная функция для каждой страны — плохая идея. Вы должны хранить данные вне вашего кода. Рассмотрите возможность использования XML, базы данных или JSON для хранения данных. Вы можете прочитать о сериализации XML здесь и здесь, например

После загрузки данных из файла в память вы можете поместить их в словарь, например

Dictionary<string, Dictionary<string, List<String>>> data;
//access data   
var cities = data["Canada"]["Ontario"];

И последняя часть - передать выбранный элемент в ваш словарь:

var states = data[country.selectedItem].Keys;

и

var cities = data[country.selectedItem][state.selectedItem];

Я полагаю, что country и state - это имена ваших CheckBoxList объектов.

Что касается использования CheckBoxList - просто реализуйте свою логику, все необходимые методы описаны здесь. (Я до сих пор не уверен, что вы используете: WPF или WinForms или что-то еще, но вы можете найти подходящие документы).

SelectedIndices и SelectedItems возвращают выбранные элементы checkBoxList.

Вы можете проверить так:

var selectedItems = country.SelectedItems;
if (selectedItems.Contains("Canada")
{
//Do what you need
}
person Pavel Oganesyan    schedule 07.05.2015
comment
Спасибо за идею. Да, страна, штат и город — это названия моих списков флажков. Я использую форму Windows. Все еще не можете понять свойство/метод, чтобы определить, не отмечен ли элемент внутри checkedListbox, а также извлечь его значение для дальнейшего сравнения? - person Nabeeha Deedar; 07.05.2015