Свойство DataMember [ObjectName] не может быть найдено в источнике данных - PullRequest
5 голосов
/ 26 февраля 2009

У меня есть бизнес-объект, который представляет собой совокупность дочерних объектов.
Я использую привязку данных в Visual Studio 2008 для привязки к элементам управления в форме Windows.

Но я получаю вышеуказанную ошибку в методе InitializeComponent формы.

Допустим, у меня есть объект с именем ParentObject, который содержит общий список ChildListObject. ParentObject также имеет дочерний объект, который сам имеет дочерний объект. (т.е. ParentObject.ChildObject.ChildObject)

Я установил основной источник привязки:

BindingSource.Datasource = ParentObject

Я добавляю сетку и устанавливаю источник привязки:

GridBindingSource.Datasource = ParentObject

и установите DataMember на:

BindingSourceB.DataMember = "ChildListObject"

Теперь для источника данных сетки установлено значение GridBindingSource:

Me.MyDataGridView.DataSource = Me.GridBindingSource

Есть также другие элементы управления, которые связаны со свойствами ParentObject и ParentObject.ChildObject

Я проверил это в изолированном проекте, и он отлично работает, поэтому у меня возникли проблемы с поиском реальной ошибки? Код, который раньше работал, внезапно перестанет работать.

Ошибка, которую я получаю (если я использую имена объектов в приведенном выше примере):

"Свойство DataMember ChildObject не может найти в источнике данных "

Не удается:

Me.MyDataGridView.DataSource = Me.GridBindingSource

Странно, если я удаляю , а затем, когда он терпит неудачу, просто продолжаю, это нормально ??? Но это все еще терпит неудачу во время выполнения.

У кого-нибудь есть идеи, которые могли бы указать мне правильное направление? Самое близкое, что я нашел через поиск в Google, это то, что он может иметь отношение к порядку сгенерированного конструкторского кода, который испортился. Код, который работал, внезапно перестанет работать.


Эта проблема, кажется, приходит и уходит. Если я просто продолжу после того, как ошибка будет поднята, программа успешно продолжится без проблем. Возможно, ошибка в VS. Но во время выполнения ошибка все еще существует.

Что вызывает эту проблему? Как мне остановить это?

Ответы [ 6 ]

4 голосов
/ 07 июня 2011

Я попробовал несколько экспериментов на этом. Проблема возникает только в этом состоянии если у вас есть BaseForm и BindingSource на нем, если вы унаследуете новую InheritedForm от этой BaseForm, или
если у вас есть дополнительный источник привязки на InheritedForm, связанный с BindingSource (который наследуется BaseForm) у вас ошибка дизайнера. У меня нет дизайнерского решения, но если вы просто проигнорируете и продолжите, все будет нормально при повторной сборке проекта или вам нужно установить дата-код по коду.

2 голосов
/ 30 мая 2011

Просто переместите ваш генерируемый код на Form_Load событие, подобное этому:

private void MainForm_Load(object sender, EventArgs e)
{
    Me.MyDataGridView.DataMember = "DataMember";
    Me.MyDataGridView.DataSource = "DataSource";
}
2 голосов
/ 29 октября 2009

Единственный найденный мной обходной путь:

  1. Удалить все столбцы из сетки
  2. Добавить нужные столбцы обратно в сетку (это предотвращает удаление столбцов на следующем шаге)
  3. Удалить источник данных сетки
  4. Установите источник данных сетки в событии загрузки формы.
1 голос
/ 26 февраля 2009

Datamember должен быть строкой, которая определяет, какое свойство списка вы хотите показать. Не обязательно здесь.

Это имело бы смысл:

BindingSourceB.Datasource = ParentObject.ChildList;

Если ваша привязка к сетке, вы не установите Datamember. Просто установите источник данных, а затем используйте конструктор для настройки сетки.

GetType поможет дизайнеру. В свойствах конструктора вы должны установить BindingSourceB на тип ChildListObject, а затем сделать то, что я делал выше.

0 голосов
/ 03 ноября 2016

По какой-то причине ошибка не регистрировалась в окне ошибок, пока я вручную не открыл «Конструктор» для своей формы. Открыв задачу дизайнера, я смог увидеть ошибки в привязках и тому подобное, которые можно удалить вручную.

Это вызвало то, что я удалил источники данных из своего проекта, но, по-моему, он не удалил весь код позади них автоматически.

0 голосов
/ 12 сентября 2014

У меня была такая же проблема

Private WithEvents _model As MyModel

удалил WithEvents и все снова заработало

Private _model As MyModel
...