2016-07-07 4 views
1

У меня есть сложные формы, где элементы управления находятся на разных вкладках и панелях. Эти формы используют источник привязки для привязки своих элементов управления к источнику данных.Как проверить привязку данных управления к источнику привязки?

Могут быть ситуации во время разработки, когда члены источника данных были переименованы, но не элементы управления формы.

Как никакое исключение не бросается на загрузку формы, существует ли способ перебрать элементы источника данных bindingsource и сравнить их с значениями привязки элементов управления?

Особое внимание должно быть уделено скрытым элементам управления, как описано в этом документе SO answer.

Где должна проходить эта проверка? В конструкторе или OnLoad? (Это должно произойти, по крайней мере, после InitializeComponent, потому что в этом методе задан источник данных bindingsource, то есть typeof (myObject).

+0

Когда привязка данных к свойствам acontrol, если свойство не существует в источнике данных, возникает исключение: 'Невозможно привязать свойство или столбец XXXXXX к DataSource.' –

+0

@RezaAghaei No Exception. –

+0

Исключение возникает, но не выбрасывается - проверьте настройки исключения. Затем в некоторых случаях, если исключение выбрано в обработчике событий 'Load', оно будет проглатываться - в этом случае вы можете обработать обработчик события' Load' с помощью 'Try .. catch' – Fabio

ответ

0

Объект привязки имеет обязательную привязку события, которая может помочь вам получить статут (sucess-error) операции привязки (чтение-запись).

Не забудьте включить форматирование для привязки данных. Без этого событие не поднимается.

https://msdn.microsoft.com/en-us/library/k26k86tb(v=vs.100).aspx

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

Обертка загрузки с помощью Try Catch также является хорошей вещью (в каждом случае), потому что исключение, созданное в этом событии, незаметно захватывается Winforms. Это может сделать форму загруженной и видимой только с половиной вашего «кода процесса загрузки».

+0

Вы можете просто проверить привязку данных к недопустимому свойству: 'this.DataBindings.Add (новый System.Windows. Forms.Binding («Текст», это, «XXXXXX», true)); «Исключение будет повышаться: * System.ArgumentException: Невозможно связать свойство или столбец XXXXXX с источником данных. Имя параметра: dataMember * –

+0

если вы создаете привязку до того, как объект данных IList будет инициализирован (с дизайнером на примере?), или если тип источника будет изменен после. Если у меня есть хорошая память, в этом случае не генерируется исключение. –

+0

Я установил 'Argu mentException'. Я также добавил 'try ... catch' в конструкторе формы и методах OnLoad. Исключение все равно не выбрасывается. –

Смежные вопросы