Привязка данных текстового поля WinForms .NET 8 к BindingSource в Designer: как?

Проводя эксперименты по проверке удобства использования WinForms и .NET 8 для преобразования устаревших проектов .NET 4.8, я столкнулся со своеобразными «слепыми пятнами»:

Кажется, что в пустой форме с TextBox и BindingSource (перетащенной из панели инструментов) нет способа установить привязку данных свойства TextBox «Text» к свойству экземпляра BindingSource (как это было раньше). с .NET 4.8).

Конечно, программно это все еще возможно, например.

this.textbox1.DataBindings.Add("Text", this.bsMain, "name");

(где «bsMain» — это имя BindingSource Form1), но это в первую очередь противоречит всей цели создания экземпляра BindingSource из панели инструментов.

Это все еще поддерживается/я что-то упускаю из виду?

Это возможно. Выберите TextBox, перейдите к его селектору (DataBindings) в PropertyGrid, откройте диалоговое окно (Advanced), выберите свойство для привязки и источник данных из раскрывающегося списка Binding. Это делает то же самое, что вы делаете в своем коде, с той лишь разницей, что код генерируется в файле .Designer.cs, а не в основном файле .cs (BindingSource может изначально быть привязан к типу; в этом случае вам необходимо сбросить источник данных после вызова InitializeComponent())

Jimi 16.08.2024 08:06

Я попробовал это, но именованный элемент управления BindingSource формы (видимый в нижней части поверхности конструктора формы) (bsMain) просто не отображается как источник данных, который можно выбрать. Сам BindingSource на этом этапе разработки еще не подключен к какому-либо базовому источнику данных. Это может произойти только позже в оставшейся части Конструктора.

whale70 16.08.2024 08:30

Как привязать элемент управления к источнику данных, у которого нет определенного источника, поэтому поля данных фактически не определены? Вам необходимо выбрать источник данных для вашего BindingSource. Может быть объектом класса. Как упоминалось ранее, он не обязательно должен содержать данные; как уже упоминалось, в этом случае для DataSource установлено значение Type, которое предоставляет поля данных, к которым вы привязываетесь. Данные могут быть установлены в любой момент после вызова InitializeComponent(), поскольку именно тогда создаются компонент BindingSource и элементы управления.

Jimi 16.08.2024 08:34

Наш типичный сценарий — привязка данных к DataTable или DataView; Источник данных BindingSource для них устанавливается после вызова InitializeComponent(). Привязка данных в дизайнере тогда просто включает в себя настройку, например. Источник данных текстового поля и элемент данных для BindingSource, а также именованное (строковое) поле/столбец этого DataTable DataView. Это работает очень хорошо, сделать то же самое в .NET 8 в дизайнере кажется невозможным, но он использует код. Я просто не понимаю, почему дизайнер не покажет BindingSource формы как возможного кандидата на источник данных, как вы предложили.

whale70 16.08.2024 08:55

Я не понимаю, как можно создать привязку, если нет определенного столбца данных, к которому можно привязать свойство элемента управления. Если у вас есть DataTable, я предполагаю, что вы используете типизированный DataSet в дизайнере, ViewModel или что-то еще. В противном случае, для чего вам нужен компонент BindingSource (который, кстати, автоматически генерируется при выборе любого источника данных)?

Jimi 16.08.2024 09:36

DataTables/Views, которые мы иногда используем, являются динамическими/нетипизированными. Выполнение привязки данных в конструкторе к BindingSource, для которого еще не установлен источник данных (во время разработки и при вызове InitializeComponent), просто приведет к появлению строки кода 'this.textbox1.DataBindings.Add("Text", this.bsMain , "имя");' в CS-файле дизайнера. И это очень полезно, поскольку позволяет нам устанавливать поля столбцов без источника типизированного объекта. BindingSource можно использовать таким образом, даже не зная во время разработки, каким в конечном итоге будет источник данных.

whale70 16.08.2024 09:54

Ну, я не совсем понимаю ваши требования; в любом случае, я не думаю, что существует диалоговое окно VS, которое позволяет указать исходное поле/свойство/столбец источника данных, у которого нет источника данных (так в оригинале). Я не помню, чтобы это было возможно и в .NET Framework. BindingSource не является источником данных как таковой, если только вы не установили его свойство DataSource для конкретного объекта или типа, который предоставляет свойства/столбцы.

Jimi 16.08.2024 12:47
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
99
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновление: после тестирования вы можете вручную ввести bsMain-Name в опции «Текст».


Как сказал Джими, даже в .NET Framework нет опции, позволяющей указать исходное поле/свойство/столбец источника данных, у которого нет источника данных.

Сначала вам необходимо связать DataSource для bsMain, чтобы в привязке данных текстового поля была опция bsMain.

Учитывая, что вам нужно установить DataSource динамически, вы можете установить для bsMain DataSource none после генерации bsMain-Name.

Это именно тот ответ, который я искал, это работает; ему необходимо имя BindingSource с '-' (включая пробелы), а затем имя поля/члена/столбца. Большое спасибо! Это где-то задокументировано?

whale70 17.08.2024 03:58

Другие вопросы по теме