Перейти к содержимому

Bindingsource c как использовать

  • автор:

Общие сведения о компоненте 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 — обеспечить унифицированный доступ к источнику данных. Но он также помогает использовать несколько возможностей:

  1. В случае привязки DataTable к BindingSource появляется возможность сортировки, фильтрации и поиска.
  2. BindingSource может являться источником данных не только для элементов управления, но и для самого BindingSource.
  3. Вы можете работать с одним источником данных, привязанным ко многим элементам управления.

Справочная информация по вопросу: Компонент 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 сделать и посмотрите работает или нет.

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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *