Listbox を ADO.Net データテーブルに直接バインドする代わりに、DataView にバインドするようにコードを変更してみてください。DataViews は、基になっている基になる DataTable から独立して並べ替えおよびフィルター処理できます...
LBStates が州の ListBox で、lbCities が City ListBox で、dtCities がフォーム レベルの DataTable 変数で、その中にすべての都市があり、State 列があるとします...
DataView dvCities = dtCities.DefaultView;
dvCities.RowFilter = "State=" + lbStates.SelectedItem;
lbCities.DataSource = dvCities;
selectedIndexChanged イベントを States ListBox に接続します (初期化コード内)。
lbStates.SelectedIndexChanged += lbStates_SelectedIndexChanged;
States ListBox SelectedIndexChanged イベントで、同じコードを追加します...
private void lbStates_SelectedIndexChanged(object sender, event e)
{
DataView dvCities = dtCities.DefaultView;
dvCities.RowFilter = "State=" + lbStates.SelectedItem;
lbCities.DataSource = dvCities;
}