Вы можете попробовать изменить код, чтобы вместо привязки Listbox напрямую к базе данных ADO.Net, он связывался с DataView. DataViews могут быть отсортированы и отфильтрованы независимо от базового DataTable, на котором они основаны ...
Предположим, что LBStates - это состояние ListBox, а lbCities - это City ListBox, а dtCities - это переменная DataTable уровня формы со всеми городами в нем, и в ней есть столбец состояния ...
DataView dvCities = dtCities.DefaultView;
dvCities.RowFilter = "State=" + lbStates.SelectedItem;
lbCities.DataSource = dvCities;
Подключите событие selectedIndexChanged к списку состояний ListBox (в коде инициализации)
lbStates.SelectedIndexChanged += lbStates_SelectedIndexChanged;
и в событии ListBox States SelectedIndexChanged добавьте тот же код ...
private void lbStates_SelectedIndexChanged(object sender, event e)
{
DataView dvCities = dtCities.DefaultView;
dvCities.RowFilter = "State=" + lbStates.SelectedItem;
lbCities.DataSource = dvCities;
}