Я бы сделал так:
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; }
}
}