Привязка DataTable к ListBox

Я экспериментирую и изучаю приложение Windows Forms, и я не могу понять конструкцию привязки. Согласно документации MSDN: - Вы можете указать экземпляр любого из следующих классов для источника данных:

DataSet

Таблица данных

DataView

DataViewManager

BindingSource

Итак, у меня есть простой код для понимания этой конструкции.

Я инициализировал простую форму окна со списком listBox1 и DataTable data_table.

 static DataTable data_table = new DataTable("ParentTable");  
DataColumn column;
                DataRow row;
                column = new DataColumn();
                column.DataType = System.Type.GetType("System.Int32");
                column.ColumnName = "id";
                column.ReadOnly = false;
                column.Unique = true;
                // Add the Column to the DataColumnCollection.
                data_table.Columns.Add(column);
                for (int i = 0; i <= 2; i++)
                {
                    row = data_table.NewRow();
                    row["id"] = i;

                    data_table.Rows.Add(row);
                }

может напрямую связываться с DataSource с помощью.

listBox1.DataSource=new BindingSource(data_table , null);
listBox1.ValueMemeber = "id";

Но когда я использую следующее

 Binding myBinding = new Binding("DataSource", data_table, "id");

 form_m.listBox1.DataBindings.Add(myBinding);

Я получаю исключение

System.ArgumentException: Complex DataBinding accepts as a data source either an IList or an IListSource

Я буду очень признателен, если кто-нибудь сможет мне с этим помочь.

Обратите внимание, что страница справки по тегам явно указывает: «Избегайте вставки тегов в заголовки в любом из следующих форматов:» ... «[тег]: [название вопроса]»

Llama 07.01.2019 07:08

Если это действительно Winforms, BindingSource, вероятно, то, что вы хотите использовать - или вообще ничего, потому что DataTable будет работать

Ňɏssa Pøngjǣrdenlarp 07.01.2019 07:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
596
2

Ответы 2

Вы используете перегрузку конструктора с тремя аргументами Привязка (Строка, Объект, Строка)
Где параметры
Имя свойства
- Имя свойства элемента управления для привязки.
- DataSource в твоем футляре

источник данных
- Объект, представляющий источник данных. - Это основной источник данных, обратите внимание, что это не источник данных, который будет привязан к List.Box.DataSource.

dataMember
- Свойство или список для привязки.
- Это имя свойства в основном источнике данных, значение которого будет привязано к DataSource элемента управления. Это значение должно быть IList или IListSource.

Установить ListBox.DataSource можно без лишних привязок

listBox.DataSource = myDataTable;

Проверить ссылку: Привязка данных Windows Forms
Должно быть достаточно информации о том, как вы можете использовать привязку данных, и если вы рассмотрите примеры, вы получите довольно хорошее представление о том, как вы можете использовать привязку данных в соответствии с вашими требованиями.

Спасибо за ответ. Я все еще не могу найти способ использовать конструкцию Binding. Я знаю, что могу использовать BindingSource, но я хотел бы узнать, как работает эта конструкция Binding. Также меня интересует использование DataSourceUpdateMode

user2288650 07.01.2019 18:41

@ user2288650, проверьте ссылку, которую я добавил в ответ.

Fabio 07.01.2019 19:15

Спасибо - Фабио, я прочитал документацию и могу без проблем получить привязку для работы с Textbox. Это просто список, который не работает,

user2288650 07.01.2019 20:22

Никаких дополнительных привязок не требуется. Вы можете назначить Список, массив, таблицы для Источник данных, а также предоставить DisplayMember и ValueMember, когда вы используете Список объектов или таблиц как Источник данных, если вы используете одномерный массив, тогда вам не нужно предоставлять DisplayMember и ValueMember.

listbox1.DataSource = data_table; 
listbox1.ValueMember = "id"; 
listbox1.DisplayMember = "id";

Спасибо за ответ. Я просто пытаюсь понять, как работает этот конструктор привязки

user2288650 07.01.2019 18:42

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