Прошу прощения. Если бы я действительно сделал так как описал выше — проблемы бы не возникло.
Причина вот в чем:
Несколько моих классов реализуют интерфейс IParentRecord, еще несколько реализуют интерфейс — IChildRecord;
Каждый класс реализующий интерфейс IParentRecord, содержит коллекцию объектов класса реализующего IChildRecord;
(таким образом у меня формируются пары связанных таблиц)
Получаются нечто вроде:
IParentRecord
{
BindingList<IChildRecord> СhildRecords { get; set; }
}
SomeParentClass1 : IParentRecord
{
BindingList<IChildRecord> _childRecords;
...
}
SomeParentClass2 : IParentRecord
{
BindingList<IChildRecord> _childRecords;
...
}
Засада в том, что я, как оказалось, совершенно напрасно передаю в BindingList — интерфейс. Как только я начинаю передавать ему конкретные классы, DataGridView инициализируется нормально (позволяет добавлять/удалять записи). Как мне кажется, дело в том, что BindingList (а может BindingSource), в случае, если в качестве типа BindingList'у передан интерфейс, "не знает" конструктор какого класса вызывать. Но вместо того, что бы выдать исключение, BindingList(или BindingSource) молча позволяет над ним надругаться. А в результате — пустой datagridview. Никак не могу придумать, как обойти эти грабли. Отказываться от достигнутого уровня абстрации очень не хочется, половину программы переписывать придется