When you first load the table it has no selected items, so it throws a SelectedValueChanged event with an index of -1. It is likely that it also returns this as teh value if there is none at the time.
At the start of the event handler, check the index:
private void cbSource_SelectedValueChanged(object sender, EventArgs e)
{
ComboBox cb = sender as ComboBox;
if (cb != null && cb.SelectedIndex >= 0)
{
...
}
}