У меня есть форма, которая будет заполнена кучей информации из шаблона, а затем передана пользователю для заполнения остальных. Дело в том, что шаблон и объект, который содержит конечный результат, являются DataRows, потому что все они входят и выходят из базы данных (над которой у меня нет контроля над схемой), так что это кажется отличным местом, чтобы просто связать все элементы управления и заниматься более важными вещами, верно?
Я не могу заставить элементы управления правильно связываться, и это отчасти моя вина, потому что я хотел просто выбросить строку, чтобы она выяснила, какие столбцы из строки важны, и сохранить значения от них, поэтому Я часто выкидываю строки, в которых нет всех столбцов, ожидаемых элементами управления, и поэтому они выдают исключение. Но это отчасти я не знаю, кто виноват, потому что делает это:
inProductName.DataBindings.Add("Text", TemplateBinder, "ProductName");
где TemplateBinder - это объект BindingSource со свойством DataSource, установленным в значение DataRow, которое я хочу вывести, выдает исключение, когда я иду показывать форму. Не совсем уверен, что я должен делать по-другому - TemplateBinder не будет содержать никаких источников данных, пока я не получу строку шаблона, и если мне придется самому управлять связыванием вместо того, чтобы устанавливать их и забывать их в верхней части страницы, я не получить большую ценность от привязки.
И это всего лишь тест, чтобы увидеть, возможно ли то, что я пытаюсь сделать! Я пытаюсь передать BindingSource строку, содержащую значения, которые я хочу распространить в форму, приостановить привязку, отключить ее для пустой строки из таблицы, чтобы значения, которые я распространял, остались в свойствах, которые я связал, покажите форму, дайте пользователю заполнить ее, а затем снова включите связывание, чтобы связанные свойства в элементах управления перетекли в пустую строку, которую я установил как источник данных BindingSource. Я имею в виду, что это никак не сработает, потому что это будет слишком просто, но было бы неплохо, если бы я мог сделать это вместо своего старого способа, который включал в себя оператор переключения из 30 случаев.
Я не хочу заходить слишком далеко вниз по кроличьей норе. В Visual Studio есть заманчивая кнопка, которая говорит, что она просто все настроит автоматически, но у меня есть опыт работы с Visual Studio, который предполагает, что ей не понравится идея, что схема базы данных не будет изменена в Visual Studio. Кроме того, я понятия не имею, как получить гибкость, которую я (или, скорее, мои клиенты) требую от этой причудливой автоматической настройки (я даже не вижу, как программно связываться со строкой соединения). Код, вставленный мной в копию, вероятно, менее грех, чем уничтожение функций, потому что я внес радикальные изменения за кулисы, которые, как оказалось, сделали некоторые очень удобные функции неудобными. Copypasta может быть превращена в функцию намного быстрее, чем требуется, чтобы переписать все приложение. И что тогда, если база данных изменится? Кажется, что автоматический код предпочитает генерировать исключение вместо того, чтобы просто проглотить свою гордость и ничего не делать, если у него недостаточно информации, чтобы что-то сделать.
Итак, Stack Overflow, tl; dr: Я хочу, чтобы привязка данных работала для меня вместо того, чтобы заставлять меня выбрасывать все, что я сделал. Можно я?