Общие сведения о компоненте BindingSource
Компонент BindingSource предназначен для упрощения процесса привязки элементов управления к источнику данных. Компонент BindingSource выступает в качестве источника и канала передачи данных для привязки других элементов управления. Он реализует абстракцию подключения данных формы, перенаправляя команды к базовому списку данных. Кроме того, можно добавлять данные непосредственно в него, поэтому сам компонент выступает и в качестве источника данных.
Компонент BindingSource в качестве посредника
Компонент BindingSource выступает в качестве источника данных для некоторых или всех элементов управления формы. BindingSource можно привязать к элементу управления в Visual Studio с помощью свойства DataBindings , которое доступно в окне Свойства. См. также Практическое руководство. Связывание элементов управления Windows Forms с компонентом BindingSource с помощью конструктора.
Компонент BindingSource можно привязать как к источникам простых данных, например одиночному свойству объекта или базовой коллекции, такому как ArrayList, так и к источникам сложных данных, таким как таблица базы данных. Компонент BindingSource является посредником, обеспечивающим привязку и управление валютой. Во время разработки или во время выполнения компонент BindingSource можно привязать к источнику сложных данных, указав в качестве значений его свойств DataSource и DataMember базу данных и таблицу. На следующем рисунке показано, как компонент BindingSource встраивается в существующую архитектуру привязки данных.
Во время разработки некоторые действия, например перетаскивание таблицы базы данных из окна данных в пустую форму, приведут к созданию компонента BindingSource, его привязке к базовому источнику данных и добавлению элементов управления данными в одной операции. См. также Привязка элементов управления Windows Forms к данным в Visual Studio.
Компонент BindingSource в качестве источника данных
Если начать добавлять элементы в компонент BindingSource компонента без указания списка для привязки, то компонент будет действовать как источник данных в виде списка и примет эти элементы.
Кроме того, можно написать код, чтобы добавить пользовательскую функциональность «AddNew» с помощью события AddingNew, которое возникает при вызове метода AddNew перед добавлением элемента в список. Дополнительные сведения см. в разделе Архитектура компонента BindingSource.
Переходы
Для пользователей, которым необходимо перемещение данных в форме, компонент BindingNavigator предоставляет возможность перемещения данных и управления ими совместно с компонентом BindingSource. Дополнительные сведения см. в разделе Элемент управления BindingNavigator.
Обработка данных
BindingSource выступает в качестве CurrencyManager для всех привязок и, таким образом, может предоставлять доступ к сведениям о валюте и положении в зависимости от источника данных. В следующей таблице показаны члены, предоставляемые компонентом BindingSource для доступа и обработки базовых данных.
| Элемент | Description |
|---|---|
| Свойство Current | Возвращает текущий элемент источника данных. |
| Свойство Position | Возвращает или задает текущую позицию в базовом списке. |
| Свойство List | Возвращает список, который является результатом вычисления DataSource и DataMember. Если свойство DataMember не задано, то возвращается список, указанный в DataSource. |
| InsertМетод | Вставляет элемент в список по указанному индексу. |
| RemoveCurrentМетод | Удаляет текущий элемент из списка. |
| EndEditМетод | Применяет ожидающие изменения к базовому источнику данных. |
| CancelEditМетод | Отменяет текущую операцию редактирования. |
| AddNewМетод | Добавляет новый элемент в базовый список. Если источник данных реализует IBindingList и возвращает элемент из события AddingNew, то добавляется этот элемент. В противном случае запрос передается в метод AddNew списка. Если базовый список не является IBindingList, элемент автоматически создается с помощью его открытого конструктора без параметров. |
Сортировка и фильтрация
Как правило, работа осуществляется с упорядоченным или отфильтрованным представлением источника данных. В следующей таблице показаны члены, предоставляемые компонентом BindingSource источника данных.
| Элемент | Description |
|---|---|
| Свойство Sort | Если источником данных является IBindingList, то возвращает или задает имя столбца, используемого для сортировки, и порядок сортировки. Если источником данных является IBindingListView и поддерживается расширенная сортировка, то возвращает имена нескольких столбцов, используемых для сортировки, и порядок сортировки |
| Свойство Filter | Если источником данных является IBindingListView, то возвращает или задает выражение, используемое для фильтрации просматриваемых строк. |
См. также
- BindingSource
- BindingNavigator
- Архитектура компонента BindingSource
- Компонент BindingSource
- Элемент управления BindingNavigator
- Привязка данных Windows Forms
- Элементы управления для использования в Windows Forms
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Что такое BindingSource
Не могу понять, что такое BindingSource . Через адаптеры мы можем манипулировать данные. Тогда зачем нам BindingSource ?
Отслеживать
14k 13 13 золотых знаков 38 38 серебряных знаков 63 63 бронзовых знака
задан 19 дек 2017 в 20:29
user265018 user265018
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Основная задача компонента BindingSource — обеспечить унифицированный доступ к источнику данных. Но он также помогает использовать несколько возможностей:
- В случае привязки DataTable к BindingSource появляется возможность сортировки, фильтрации и поиска.
- BindingSource может являться источником данных не только для элементов управления, но и для самого BindingSource.
- Вы можете работать с одним источником данных, привязанным ко многим элементам управления.
Справочная информация по вопросу: Компонент BindingSource.
Архитектура компонента BindingSource
BindingSource С помощью компонента можно универсально привязать все элементы управления Windows Forms к источникам данных.
Компонент BindingSource упрощает процесс управления привязкой к источнику данных и предоставляет следующие преимущества по сравнению с традиционной привязкой данных:
- Включает привязку во время разработки к бизнес-объектам.
- Инкапсулирует CurrencyManager функциональные возможности и предоставляет CurrencyManager события во время разработки.
- Упрощает создание списка, поддерживающего интерфейс, IBindingList предоставляя уведомление об изменении списка для источников данных, которые изначально не поддерживают уведомление об изменении списка.
- Предоставляет точку расширяемости для IBindingList.AddNew метода.
- Предоставляет уровень косвенного взаимодействия между источником данных и элементом управления. Это косвенное значение важно, если источник данных может измениться во время выполнения.
- Взаимодействует с другими элементами управления Windows Forms, связанными с данными, в частности BindingNavigator , с DataGridView элементами управления.
По этим причинам BindingSource компонент является предпочтительным способом привязки элементов управления Windows Forms к источникам данных.
Функции BindingSource
Компонент BindingSource предоставляет несколько функций для привязки элементов управления данными. С помощью этих функций вы можете реализовать большинство сценариев привязки данных практически без написания кода на вашей части.
Компонент BindingSource достигает этого, предоставляя согласованный интерфейс для доступа к различным типам источников данных. Это означает, что для привязки к любому типу используется та же процедура. Например, можно подключить DataSource свойство к DataSet бизнес-объекту или в обоих случаях, используя один и тот же набор свойств, методов и событий для управления источником данных.
Согласованный интерфейс, предоставляемый BindingSource компонентом, значительно упрощает процесс привязки данных к элементам управления. Для типов источников данных, которые предоставляют уведомление об изменении, BindingSource компонент автоматически передает изменения между элементом управления и источником данных. Для типов источников данных, которые не предоставляют уведомления об изменении, предоставляются события, позволяющие создавать уведомления об изменениях. В следующем списке показаны функции, поддерживаемые компонентом BindingSource :
- Косвенный.
- Управление валютами.
- Источник данных в виде списка.
- BindingSourceкак .IBindingList
- Создание пользовательского элемента.
- Создание транзакционного элемента.
- IEnumerable Поддержки.
- Поддержка времени разработки.
- Статические ListBindingHelper методы.
- Сортировка и фильтрация с помощью IBindingListView интерфейса.
- Интеграция с BindingNavigator.
Косвенное обращение
Компонент BindingSource предоставляет уровень косвенного взаимодействия между элементом управления и источником данных. Вместо привязки элемента управления непосредственно к источнику данных вы привязываете элемент управления к BindingSourceобъекту и подключаете источник данных к BindingSource свойству компонента DataSource .
С помощью этого уровня косвенного обращения можно изменить источник данных без сброса привязки элемента управления. Это дает следующие возможности:
- Вы можете подключить BindingSource их к разным источникам данных, сохраняя текущие привязки элементов управления.
- Вы можете изменять элементы в источнике данных и уведомлять связанные элементы управления. Дополнительные сведения см. в статье «Практическое руководство. Рефлексия источник данных Обновления в элементе управления Windows Forms с помощью BindingSource.
- Вы можете привязаться к Type объекту вместо объекта в памяти. Дополнительные сведения см. в статье «Практическое руководство. Привязка элемента управления Windows Forms к типу». Затем можно привязать к объекту во время выполнения.
Управление валютами
Компонент BindingSource реализует ICurrencyManagerProvider интерфейс для обработки управления валютами. ICurrencyManagerProvider С помощью интерфейса вы также можете получить доступ к диспетчеру валют для BindingSourceдиспетчера валют, а также к диспетчеру валют для другого BindingSource привязанного к тому жеDataMember.
Компонент BindingSource инкапсулирует CurrencyManager функциональные возможности и предоставляет наиболее распространенные CurrencyManager свойства и события. В следующей таблице описываются некоторые члены, связанные с управлением валютами.
Свойство CurrencyManager
Возвращает диспетчер валюты, связанный BindingSourceс .
GetRelatedCurrencyManagerМетод
Если к указанному элементу данных привязан другой BindingSource элемент данных, получает его диспетчер валют.
Свойство Current
Возвращает текущий элемент источника данных.
Свойство Position
Возвращает или задает текущую позицию в базовом списке.
EndEditМетод
Применяет ожидающие изменения к базовому источнику данных.
CancelEditМетод
Отменяет текущую операцию редактирования.
Источник данных в виде списка
Компонент BindingSource реализует IBindingListView интерфейсы и ITypedList интерфейсы. С помощью этой реализации можно использовать BindingSource сам компонент в качестве источника данных без внешнего хранилища.
BindingSource При присоединении компонента к источнику данных он предоставляет источник данных в виде списка.
Свойство DataSource можно задать для нескольких источников данных. К ним относятся типы, объекты и списки типов. Результирующий источник данных будет предоставлен в виде списка. В следующей таблице показаны некоторые распространенные источники данных и итоговая оценка списка.
| Свойство DataSource | Вывод списка результатов |
|---|---|
| Пустая ссылка ( Nothing в Visual Basic) | Пустой IBindingList объект. Добавление элемента задает список в тип добавленного элемента. |
| Ссылка null ( Nothing в Visual Basic) с набором DataMember | Не поддерживается; ArgumentExceptionвызывает . |
| Тип списка или объект типа «T» | Пустой IBindingList тип «T». |
| Экземпляр массива | Содержащий IBindingList элементы массива. |
| IEnumerable Экземпляр | IEnumerable Содержащий IBindingList элементы |
| Вывод списка экземпляров, содержащих тип «T» | Экземпляр IBindingList , содержащий тип T. |
Кроме того, DataSource можно задать для других типов списков, таких как IListSource и ITypedList, и BindingSource соответствующим образом обрабатывать их. В этом случае тип, содержащийся в списке, должен иметь конструктор без параметров.
BindingSource в качестве IBindingList
Компонент BindingSource предоставляет элементы для доступа к базовым данным и управления ими в качестве IBindingListэлемента. В следующей таблице описаны некоторые из этих элементов.
| Элемент | Description |
|---|---|
| Свойство List | Возвращает список, который приводит к оценке DataSource или DataMember свойств. |
| AddNewМетод | Добавляет новый элемент в базовый список. Применяется к источникам данных, реализующим IBindingList интерфейс и разрешающим добавление элементов (т AllowNew . е. свойству присвоено true значение ). |
Создание настраиваемых элементов
Вы можете обрабатывать AddingNew событие для предоставления собственной логики создания элементов. Событие AddingNew возникает перед добавлением нового объекта в BindingSourceобъект. Это событие возникает после AddNew вызова метода, но перед добавлением нового элемента в базовый список. Обрабатывая это событие, можно предоставить поведение создания пользовательских элементов без получения производных BindingSource от класса. Дополнительные сведения см. в разделе «Практическое руководство. Настройка добавления элементов с помощью Привязки Windows Forms».
Создание транзакционных элементов
Компонент BindingSource реализует ICancelAddNew интерфейс, который позволяет создавать транзакционные элементы. После предварительного создания нового элемента с помощью вызова AddNewдобавление может быть зафиксировано или откатировано следующим образом:
- Метод EndNew явно фиксирует ожидающий добавление.
- Выполнение другой операции сбора, например вставки, удаления или перемещения, неявно фиксирует ожидающее добавление.
- Метод CancelNew откатит ожидающий добавление, если метод еще не зафиксирован.
Поддержка интерфейса IEnumerable
Компонент BindingSource включает элементы управления привязкой к IEnumerable источникам данных. С помощью этого компонента можно привязать к источнику данных, например к источнику System.Data.SqlClient.SqlDataReaderданных.
IEnumerable Когда источник данных назначается BindingSource компоненту, BindingSource он создает IBindingList и добавляет содержимое IEnumerable источника данных в список.
Поддержка времени разработки
Некоторые типы объектов нельзя создавать во время разработки, например объекты, созданные из класса фабрики, или объекты, возвращаемые веб-службой. Иногда может потребоваться привязать элементы управления к этим типам во время разработки, даже если в памяти нет объекта, к которому могут привязаться элементы управления. Например, может потребоваться пометить заголовки столбцов элемента управления именами общедоступных свойств пользовательского DataGridView типа.
Для поддержки этого сценария BindingSource компонент поддерживает привязку к Type. При назначении TypeDataSource свойства BindingSource компонент создает пустое BindingList из Type элементов. Все элементы управления, которые впоследствии привязываются к BindingSource компоненту, будут оповещены о присутствии свойств или схемы типа во время разработки или во время выполнения. Дополнительные сведения см. в статье «Практическое руководство. Привязка элемента управления Windows Forms к типу».
Статические методы ListBindingHelper
System.Windows.Forms.BindingContextSystem.Windows.Forms.CurrencyManagerТипы и BindingSource типы используют общую логику для создания списка из DataSource / DataMember пары. Кроме того, эта общая логика публично предоставляется для использования авторами элементов управления и другими третьими сторонами в следующих static методах:
Сортировка и фильтрация с помощью интерфейса IBindingListView
Компонент BindingSource реализует интерфейс, который расширяет IBindingListViewIBindingList интерфейс. Предложения IBindingList по сортировке отдельных столбцов и IBindingListView предложения расширенной сортировки и фильтрации. С помощью IBindingListViewэтого элемента можно сортировать и фильтровать элементы в источнике данных, если источник данных также реализует один из этих интерфейсов. Компонент BindingSource не предоставляет эталонную реализацию этих элементов. Вместо этого вызовы перенаправляются в базовый список.
В следующей таблице описываются свойства, используемые для сортировки и фильтрации.
| Элемент | Description |
|---|---|
| Свойство Filter | Если источником данных является IBindingListView, то возвращает или задает выражение, используемое для фильтрации просматриваемых строк. |
| Свойство Sort | Если источником данных является IBindingList, то возвращает или задает имя столбца, используемого для сортировки, и порядок сортировки. |
Интеграция с BindingNavigator
Компонент можно использовать BindingSource для привязки любого элемента управления Windows Forms к источнику данных, но этот BindingNavigator элемент управления предназначен специально для работы с компонентом BindingSource . Элемент BindingNavigator управления предоставляет пользовательский интерфейс для управления BindingSource текущим элементом компонента. По умолчанию элемент BindingNavigator управления предоставляет кнопки, соответствующие методам навигации компонента BindingSource . Дополнительные сведения см. в статье «Практическое руководство. Навигация по данным с помощью элемента управления BindingNavigator Windows Forms».
См. также
- BindingSource
- BindingNavigator
- Общие сведения о компоненте BindingSource
- Элемент управления BindingNavigator
- Привязка данных Windows Forms
- Элементы управления для использования в Windows Forms
- Практическое руководство. Связывание элемента управления с типом в Windows Forms
- Практическое руководство. Отражение в элементе управления данных, которые обновились в источнике, с использованием компонента BindingSource в Windows Forms
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
DataGridView поиск через textbox. С использованием BindingSource
Решил попробовать поиск по DataGridView, в котором данные хранятся в bindingsource
Для поиска использую textbox 
(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("ProjectName LIKE '%' OR ProjectName LIKE '% %'", textBox1.Text);

Однако получаю ошибки сразу после ввода первого же символа. Если это поместить в блок try-catch, то следующая ошибка. Как можно правильно реализовать данный поиск? P.S. Подключение к бд хранится в Settings.settings
Отслеживать
задан 7 фев 2019 в 14:40
Mark Kovak Mark Kovak
82 11 11 бронзовых знаков
(Искать) выборку нужно делать с помощью BindingSource.Filter , кстати то что вы хотите сделать называется не поиском, а фильтрацией или выборкой, о чем прозрачно намекает само название свойства.
7 фев 2019 в 14:58
А Вы бы не могли подсказать работоспособный поиск?
7 фев 2019 в 15:00
Ну, вы попробуйте сделать тот же «ProjectName LIKE ‘<0>%’ OR ProjectName LIKE ‘% <0>%'» у BindingSource сделать и посмотрите работает или нет.0>
7 фев 2019 в 15:02
Никогда с bindingsource особо не работал. Документацию почитал. Но всё равно смутно представляю сам синтаксис написания:(
7 фев 2019 в 15:05
Вот в документации пример
7 фев 2019 в 15:06
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Работаем через BindingSource так
public partial class FormView : Form < //работа с БД private readonly IDataContext _dataContext = new TestDataContext(); //источник привязки для DGV private readonly BindingSource _bsPeople = new BindingSource(); //объект формирования выборок для DGV private readonly FilterDgv _filterDgv = new FilterDgv(); public FormView() < InitializeComponent(); //привязки SetBindings(); //загрузка Людей LoadData(); this.StartPosition = FormStartPosition.CenterScreen; this.Text = "Пример фильтрации в DGV"; >/// /// Установка привязок /// private void SetBindings() < //DGV _bsPeople.DataSource = typeof(List); _dataGridViewPeople.AutoGenerateColumns = false; _dataGridViewPeople.DataSource = _bsPeople; //текстбоксы для выборки var bFN = new Binding("Text", _filterDgv, nameof(FilterDgv.FirstName)); bFN.DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged; _textBoxFindFirstName.DataBindings .Add(bFN); var bLN = new Binding("Text", _filterDgv, nameof(FilterDgv.LastName)); bLN.DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged; _textBoxFindLastName.DataBindings .Add(bLN); var bAg = new Binding("Text", _filterDgv, nameof(FilterDgv.Age)); bAg.DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged; _textBoxFindAge.DataBindings .Add(bAg); > /// /// Загрузка данных в DGV /// private void LoadData() < DataSet data = _dataContext.GetPeople(); _bsPeople.DataSource = data.Tables[0]; //подписка на событие изменение свойств у фильтрующего объекта _filterDgv.PropertyChanged += _filterDgv_PropertyChanged; >/// /// Обработчик события изменения свойств у фильтрующего объекта /// Формирование и применения фильтра к DGV через BindingSource /// /// /// private void _filterDgv_PropertyChanged(object sender, PropertyChangedEventArgs e) < var filters = new List(); //организуем список условий if (!String.IsNullOrEmpty(_filterDgv.FirstName)) < filters.Add($"LIKE '%'"); > if (!String.IsNullOrEmpty(_filterDgv.LastName)) < filters.Add($"LIKE '%'"); > if (_filterDgv.Age > 0) < filters.Add($"> "); > //удаляем предыдущий фильтр _bsPeople.RemoveFilter(); //назначаем фильтрацию if (filters.Count == 1) < _bsPeople.Filter = filters.First(); >else if (filters.Count > 1) < _bsPeople.Filter = String.Join(" AND ", filters); >else < >> >
Весь код примера здесь
Отслеживать
ответ дан 7 фев 2019 в 19:42
9,431 2 2 золотых знака 15 15 серебряных знаков 31 31 бронзовый знак
- c#
- поиск
- datagridview
- search
- bindingsource
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.