System.Data.DataViewManagerListItemTypeDescriptor is a valid result from a BindingSource, especially if the item being bound to doesn't specify the .DisplayMember properly. Is there a particular reason why you are manually looping through the binding source? The purpose of the binding source is that you can bind it to specific controls and have them automatically populated from the database.
Anyway, I haven't tested the following code, but you may have better luck with:
foreach (object o in this.theBindingSource)
{
System.Data.DataRowView dataRowView1 = (System.Data.DataRowView)o;
}
BindingSource is already IEnumerable, so you shouldn't have to directly access the list.
UPDATE
Instead of looping through, you could do something like this to populate your DataGridView like:
theBindingSource.DataSource = tags;
yourDataGridView.DataSource = theBindingSource;
I believe .DisplayMember is only necessary on things like ListViews, but I'm not positive about that.