Morpheus_God
@Morpheus_God

Как правильно заполнить combobox?

Добрый день. Нужна помощь в правильном заполнении комбобоксов на форме.
Есть задача реализовать заполнение первого комбобокса в зависимости от того, что выбрано в первом.
В первом комбобоксе у меня список стран( штук 10 не больше) а во втором столица страны и пару других городов.
Я сейчас делаю так.
Во время загрузки формы считываю список стран из файла.
private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                StreamReader sr = new StreamReader(@"countries.txt");
                string line = sr.ReadLine();

                while (line != null)
                {
                    cbCountries.Items.Add(line);
                    line = sr.ReadLine();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Файл с списком стран недоступен!!\n" + ex.Message);
            }

А второй комбобокс у меня заполняется так.
private void cbСities_SelectedIndexChanged(object sender, EventArgs e)
        {

            if (cbCountries.SelectedIndex == 0) // Польша
            {
                cbСities.Items.Add("Варшава");
                cbСities.Items.Add("Краков");
                cbСities.Items.Add("Катовице");
            }
          if (cbCountries.SelectedIndex == 1) //Россия
            {
                cbСities.Items.Clear();
               cbСities.Items.Add("Ростов");
                cbСities.Items.Add("Москва");
                cbСities.Items.Add("Новосибирск");

            }
            if (cbCountries.SelectedIndex == 2) // США
            {
                cbСities.Items.Clear();
                cbСities.Items.Add("Вашингтон");
                cbСities.Items.Add("Нью Йорк");
                cbСities.Items.Add("Лос Анджелес");
            }
        }

Но я думаю, что я не правильно делаю с точки зрения кода. Слишком много тогда надо if если список мой будет не 10 стран а 100.
Как правильно его заполнить? В идеале что бы из файла все заполнялось.
  • Вопрос задан
  • 6452 просмотра
Решения вопроса 1
@Smilleey
Я бы сделал так:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public List<Country> Countries { get; set; }
        public List<City> Cities { get; set; }

        public Form1()
        {
            InitializeComponent();
            Countries = new List<Country>() { new Country { Name = "Russia" }, new Country { Name = "USA" } };
            Cities = new List<City>() { new City { Name = "Moscow", Country = "Russia" }, new City { Name = "St. Petersburg", Country = "Russia" }, new City { Name = "New York", Country = "USA" }, new City { Name = "Florida", Country = "USA" } };
            comboBox1.DataSource = Countries;
            comboBox1.DisplayMember = "Name";
            comboBox2.DisplayMember = "Name";
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
           comboBox2.DataSource = Cities.Where(x => x.Country == (comboBox1.SelectedValue as Country).Name).ToList();
        }
    }

    public class Country
    {
        public string Name { get; set; }
    }

    public class City
    {
        public string Country { get; set; }
        public string Name { get; set; }
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы