Насколько я понимаю, вам не нужно заполнять BindingSource, вам просто нужно заполнить список, к которому он привязан. Вот и вся идея связывания. Вы связываете свой контроль с данными, используя bindingsource.
А потом
myBindingSource.DataSource = listItem;
сделает это.
Кроме того, вместо привязки вашего вида сетки данных к BindingSource и вашего BindingSource к списку, вы можете просто привязать свое представление сетки данных к BindingList. Он похож на List, но также реализует интерфейс IBindingList (когда вы устанавливаете объект BindingList в List, он возвращает объект, реализующий IBindingList, поэтому он будет очень похож)
Соу вы можете сделать:
myDataGridView.DataSource = myBindingList;
Если свойства элементов в myBindingList изменятся, результат будет отражен в datagridview по умолчанию, если коллекция изменилась (некоторые вещи были добавлены или удалены), вы можете обновить ее, используя:
CurrencyManager cm = (CurrencyManager)this.myDataGridView.BindingContext[myBindingList];
if (cm != null)
{
cm.Refresh();
}