BindingSource Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Инкапсулирует источник данных для формы.
public ref class BindingSource : System::ComponentModel::Component, System::Collections::IList, System::ComponentModel::IBindingListView, System::ComponentModel::ICancelAddNew, System::ComponentModel::ISupportInitializeNotification, System::ComponentModel::ITypedList, System::Windows::Forms::ICurrencyManagerProvider
public ref class BindingSource : System::ComponentModel::Component, System::Collections::IList, System::ComponentModel::IBindingListView, System::ComponentModel::ICancelAddNew, System::ComponentModel::ISupportInitialize, System::ComponentModel::ISupportInitializeNotification, System::ComponentModel::ITypedList, System::Windows::Forms::ICurrencyManagerProvider
[System.ComponentModel.ComplexBindingProperties("DataSource", "DataMember")]
public class BindingSource : System.ComponentModel.Component, System.Collections.IList, System.ComponentModel.IBindingListView, System.ComponentModel.ICancelAddNew, System.ComponentModel.ISupportInitializeNotification, System.ComponentModel.ITypedList, System.Windows.Forms.ICurrencyManagerProvider
[System.ComponentModel.ComplexBindingProperties("DataSource", "DataMember")]
public class BindingSource : System.ComponentModel.Component, System.Collections.IList, System.ComponentModel.IBindingListView, System.ComponentModel.ICancelAddNew, System.ComponentModel.ISupportInitialize, System.ComponentModel.ISupportInitializeNotification, System.ComponentModel.ITypedList, System.Windows.Forms.ICurrencyManagerProvider
[<System.ComponentModel.ComplexBindingProperties("DataSource", "DataMember")>]
type BindingSource = class
inherit Component
interface IBindingListView
interface IBindingList
interface IList
interface ICollection
interface IEnumerable
interface ITypedList
interface ICancelAddNew
interface ISupportInitializeNotification
interface ISupportInitialize
interface ICurrencyManagerProvider
[<System.ComponentModel.ComplexBindingProperties("DataSource", "DataMember")>]
type BindingSource = class
inherit Component
interface IBindingListView
interface ICollection
interface IEnumerable
interface IList
interface IBindingList
interface ITypedList
interface ICancelAddNew
interface ISupportInitializeNotification
interface ISupportInitialize
interface ICurrencyManagerProvider
Public Class BindingSource
Inherits Component
Implements IBindingListView, ICancelAddNew, ICurrencyManagerProvider, IList, ISupportInitializeNotification, ITypedList
Public Class BindingSource
Inherits Component
Implements IBindingListView, ICancelAddNew, ICurrencyManagerProvider, IList, ISupportInitialize, ISupportInitializeNotification, ITypedList
- Наследование
- Атрибуты
- Реализации
Примеры
В следующем примере кода демонстрируется привязка ListBox к объекту BindingSource. Он BindingSource привязан к списку BindingList<T> шрифтов.
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace BindingSourceExamples;
public class Form1 : Form
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
public Form1() => Load += Form1_Load;
TextBox textBox1;
Button button1;
ListBox listBox1;
BindingSource binding1;
void Form1_Load(object sender, EventArgs e)
{
listBox1 = new ListBox();
textBox1 = new TextBox();
binding1 = [];
button1 = new Button();
listBox1.Location = new Point(140, 25);
listBox1.Size = new Size(123, 160);
textBox1.Location = new Point(23, 70);
textBox1.Size = new Size(100, 20);
textBox1.Text = "Wingdings";
button1.Location = new Point(23, 25);
button1.Size = new Size(75, 23);
button1.Text = "Search";
button1.Click += button1_Click;
ClientSize = new Size(292, 266);
Controls.Add(button1);
Controls.Add(textBox1);
Controls.Add(listBox1);
MyFontList fonts = [];
for (int i = 0; i < FontFamily.Families.Length; i++)
{
if (FontFamily.Families[i].IsStyleAvailable(FontStyle.Regular))
{
fonts.Add(new Font(FontFamily.Families[i], 11.0F, FontStyle.Regular));
}
}
binding1.DataSource = fonts;
listBox1.DataSource = binding1;
listBox1.DisplayMember = "Name";
}
void button1_Click(object sender, EventArgs e)
{
if (!binding1.SupportsSearching)
{
_ = MessageBox.Show("Cannot search the list.");
}
else
{
int foundIndex = binding1.Find("Name", textBox1.Text);
if (foundIndex > -1)
{
listBox1.SelectedIndex = foundIndex;
}
else
{
_ = MessageBox.Show("Font was not found.");
}
}
}
}
public class MyFontList : BindingList<Font>
{
protected override bool SupportsSearchingCore => true;
protected override int FindCore(PropertyDescriptor prop, object key)
{
// Ignore the prop value and search by family name.
for (int i = 0; i < Count; ++i)
{
if (Items[i].FontFamily.Name.Equals((string)key, StringComparison.CurrentCultureIgnoreCase))
{
return i;
}
}
return -1;
}
}
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Public Class Form1
Inherits Form
<STAThread()> _
Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
Public Sub New()
End Sub
Private textBox1 As TextBox
Private WithEvents button1 As Button
Private listBox1 As ListBox
Private components As IContainer
Private binding1 As BindingSource
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
listBox1 = New ListBox()
textBox1 = New TextBox()
binding1 = New BindingSource()
button1 = New Button()
listBox1.Location = New Point(140, 25)
listBox1.Size = New Size(123, 160)
textBox1.Location = New Point(23, 70)
textBox1.Size = New Size(100, 20)
textBox1.Text = "Wingdings"
button1.Location = New Point(23, 25)
button1.Size = New Size(75, 23)
button1.Text = "Search"
Me.ClientSize = New Size(292, 266)
Me.Controls.Add(Me.button1)
Me.Controls.Add(Me.textBox1)
Me.Controls.Add(Me.listBox1)
Dim fonts As New MyFontList()
Dim i As Integer
For i = 0 To FontFamily.Families.Length - 1
If FontFamily.Families(i).IsStyleAvailable(FontStyle.Regular) Then
fonts.Add(New Font(FontFamily.Families(i), 11.0F, FontStyle.Regular))
End If
Next i
binding1.DataSource = fonts
listBox1.DataSource = binding1
listBox1.DisplayMember = "Name"
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles button1.Click
If binding1.SupportsSearching <> True Then
MessageBox.Show("Cannot search the list.")
Else
Dim foundIndex As Integer = binding1.Find("Name", textBox1.Text)
If foundIndex > -1 Then
listBox1.SelectedIndex = foundIndex
Else
MessageBox.Show("Font was not found.")
End If
End If
End Sub
End Class
Public Class MyFontList
Inherits BindingList(Of Font)
Protected Overrides ReadOnly Property SupportsSearchingCore() As Boolean
Get
Return True
End Get
End Property
Protected Overrides Function FindCore(ByVal prop As PropertyDescriptor, _
ByVal key As Object) As Integer
' Ignore the prop value and search by family name.
Dim i As Integer
While i < Count
If Items(i).FontFamily.Name.ToLower() = CStr(key).ToLower() Then
Return i
End If
i += 1
End While
Return -1
End Function
End Class
Комментарии
Компонент BindingSource служит многим целям. Во-первых, это упрощает элементы управления привязкой к данным, предоставляя управление валютами, уведомление об изменениях и другие службы между элементами управления Windows Forms и источниками данных. Это достигается путем присоединения BindingSource компонента к источнику данных с помощью DataSource свойства. Для сложных сценариев привязки можно при необходимости задать DataMember свойство определенному столбцу или списку в источнике данных. Затем вы привязываете элементы управления к элементу BindingSourceуправления . Все дальнейшее взаимодействие с данными осуществляется с помощью вызовов BindingSource компонента. Примеры того, как BindingSource упростить процесс привязки, см. в статье "Практическое руководство. Привязка элементов управления Windows Forms к значениям базы данных DBNull и практическое руководство. Обработка ошибок и исключений, возникающих с привязкой данных". Навигация и обновление источника данных выполняются с помощью таких методов, как MoveNext, MoveLastи Remove. Такие операции, как сортировка и фильтрация, обрабатываются с помощью Sort и Filter свойств. Дополнительные сведения об использовании сортировки и фильтрации с помощью инструкций BindingSourceсм. в разделе "Практическое руководство. Сортировка и фильтрация ADO.NET данных с помощью компонента BindingSource Windows Forms".
Кроме того, BindingSource компонент может выступать в качестве строго типизированного источника данных. Обычно тип базового источника данных фиксируется одним из следующих механизмов:
Add Используйте метод для добавления элемента в BindingSource компонент.
DataSource Задайте для свойства список, один объект или тип.
Оба этих механизма создают строго типизированный список. Дополнительные сведения об использовании BindingSource привязки к типу см. в статье "Практическое руководство. Привязка элемента управления Windows Forms к типу". Можно также использовать для привязки BindingSource элементов управления к объекту фабрики. Дополнительные сведения о том, как это сделать, см. в статье "Практическое руководство. Привязка элемента управления Windows Forms к объекту фабрики".
Замечание
Так как используется как простой BindingSource , так и сложный источник данных, терминология проблематична. В этой документации по классу список терминов ссылается на коллекцию данных в размещенном источнике данных, а элемент обозначает один элемент. При обсуждении функциональных возможностей, связанных с сложными источниками данных, используются эквивалентные таблицы истроки терминов.
BindingSource предоставляет члены для доступа к базовым данным. Текущий элемент можно получить через Current свойство, и весь список можно получить через List свойство. Операции редактирования поддерживаются для текущего элемента Current и RemoveCurrentCancelEditEndEditметодов и AddAddNew методов. Хотя управление валютами обрабатывается автоматически для всех базовых типов источников данных, этот класс предоставляет ряд событий, таких как CurrentItemChanged и DataSourceChanged, которые позволяют настраивать.
Источники данных, привязанные к BindingSource компоненту, также могут перемещаться и управляться с BindingNavigator помощью класса, который предоставляет виртуальный ПУТЬ, например пользовательский интерфейс, для навигации по элементам в списке. Хотя BindingNavigator он может быть привязан к любому источнику данных, он был разработан для интеграции с компонентом BindingSource через его BindingNavigator.BindingSource свойство.
Свойство по умолчанию для BindingSource класса DataSource. Событие по умолчанию — CurrentChanged.
Предостережение
Многие члены BindingSource класса работают в базовом списке, представленном List свойством, и просто ссылаются на их операцию в базовый список. Поэтому, если BindingSource привязка привязана к пользовательской реализации IList, точное поведение этих элементов может отличаться от поведения, описанного в документации по классам. Например, RemoveAt вызовы IList.RemoveAtметода. В BindingSource документации описывается RemoveAt метод с пониманием правильности RemoveAt реализации метода для базового IList .
Конструкторы
| Имя | Описание |
|---|---|
| BindingSource() |
Инициализирует новый экземпляр BindingSource класса в значения свойств по умолчанию. |
| BindingSource(IContainer) |
Инициализирует новый экземпляр BindingSource класса и добавляет его BindingSource в указанный контейнер. |
| BindingSource(Object, String) |
Инициализирует новый экземпляр BindingSource класса с указанным источником данных и элементом данных. |
Свойства
| Имя | Описание |
|---|---|
| AllowEdit |
Возвращает значение, указывающее, можно ли изменять элементы в базовом списке. |
| AllowNew |
Возвращает или задает значение, указывающее, можно ли AddNew() использовать метод для добавления элементов в список. |
| AllowRemove |
Возвращает значение, указывающее, можно ли удалить элементы из базового списка. |
| CanRaiseEvents |
Возвращает значение, указывающее, может ли компонент вызвать событие. (Унаследовано от Component) |
| Container |
Возвращает объект IContainer , содержащий Componentобъект . (Унаследовано от Component) |
| Count |
Возвращает общее количество элементов в базовом списке, учитывая текущее Filter значение. |
| CurrencyManager |
Возвращает диспетчер валют, связанный с этим BindingSource. |
| Current |
Возвращает текущий элемент в списке. |
| DataMember |
Возвращает или задает определенный список в источнике данных, к которому соединитель в настоящее время привязывается. |
| DataSource |
Возвращает или задает источник данных, к которому привязывается соединитель. |
| DesignMode |
Возвращает значение, указывающее, находится ли текущий Component режим разработки. (Унаследовано от Component) |
| Events |
Возвращает список обработчиков событий, подключенных к этому Component. (Унаследовано от Component) |
| Filter |
Возвращает или задает выражение, используемое для фильтрации отображаемых строк. |
| IsBindingSuspended |
Возвращает значение, указывающее, приостановлена ли привязка списка. |
| IsFixedSize |
Возвращает значение, указывающее, имеет ли базовый список фиксированный размер. |
| IsReadOnly |
Возвращает значение, указывающее, доступен ли базовый список только для чтения. |
| IsSorted |
Возвращает значение, указывающее, сортируются ли элементы в базовом списке. |
| IsSynchronized |
Возвращает значение, указывающее, синхронизирован ли доступ к коллекции (потокобезопасный). |
| Item[Int32] |
Возвращает или задает элемент списка по указанному индексу. |
| List |
Возвращает список, к которому привязан соединитель. |
| Position |
Возвращает или задает индекс текущего элемента в базовом списке. |
| RaiseListChangedEvents |
Возвращает или задает значение, указывающее, следует ли ListChanged вызывать события. |
| Site |
Возвращает или задает ISite объект Component. (Унаследовано от Component) |
| Sort |
Возвращает или задает имена столбцов, используемых для сортировки, и порядок сортировки для просмотра строк в источнике данных. |
| SortDescriptions |
Возвращает коллекцию описаний сортировки, применяемых к источнику данных. |
| SortDirection |
Получает направление сортировки элементов в списке. |
| SortProperty |
Возвращает значение, используемое PropertyDescriptor для сортировки списка. |
| SupportsAdvancedSorting |
Возвращает значение, указывающее, поддерживает ли источник данных сортировку с несколькими столбцами. |
| SupportsChangeNotification |
Возвращает значение, указывающее, поддерживает ли источник данных уведомление об изменении. |
| SupportsFiltering |
Возвращает значение, указывающее, поддерживает ли источник данных фильтрацию. |
| SupportsSearching |
Возвращает значение, указывающее, поддерживает ли источник данных поиск с Find(PropertyDescriptor, Object) помощью метода. |
| SupportsSorting |
Возвращает значение, указывающее, поддерживает ли источник данных сортировку. |
| SyncRoot |
Возвращает объект, который можно использовать для синхронизации доступа к базовому списку. |
Методы
| Имя | Описание |
|---|---|
| Add(Object) |
Добавляет существующий элемент в внутренний список. |
| AddNew() |
Добавляет новый элемент в базовый список. |
| ApplySort(ListSortDescriptionCollection) |
Сортирует источник данных с указанными описаниями сортировки. |
| ApplySort(PropertyDescriptor, ListSortDirection) |
Сортирует источник данных с помощью указанного дескриптора свойства и направления сортировки. |
| CancelEdit() |
Отменяет текущую операцию редактирования. |
| Clear() |
Удаляет все элементы из списка. |
| Contains(Object) |
Определяет, является ли объект элементом в списке. |
| CopyTo(Array, Int32) |
Копирует содержимое указанного List массива, начиная с указанного значения индекса. |
| CreateObjRef(Type) |
Создает объект, содержащий все соответствующие сведения, необходимые для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
| Dispose() |
Освобождает все ресурсы, используемые параметром Component. (Унаследовано от Component) |
| Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые BindingSource и при необходимости освобождает управляемые ресурсы. |
| EndEdit() |
Применяет ожидающие изменения к базовому источнику данных. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| Find(PropertyDescriptor, Object) |
Выполняет поиск индекса элемента, имеющего дескриптор свойства. |
| Find(String, Object) |
Возвращает индекс элемента в списке с указанным именем и значением свойства. |
| GetEnumerator() |
Извлекает перечислитель для объекта List. |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetItemProperties(PropertyDescriptor[]) |
Извлекает массив PropertyDescriptor объектов, представляющих привязываемые свойства типа списка источников данных. |
| GetLifetimeService() |
Устаревшие..
Извлекает текущий объект службы времени существования, который управляет политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| GetListName(PropertyDescriptor[]) |
Возвращает имя списка, предоставляющего данные для привязки. |
| GetRelatedCurrencyManager(String) |
Возвращает связанный диспетчер валют для указанного элемента данных. |
| GetService(Type) |
Возвращает объект, представляющий службу, предоставляемую Component или ее Container. (Унаследовано от Component) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| IndexOf(Object) |
Выполняет поиск указанного объекта и возвращает индекс первого вхождения в пределах всего списка. |
| InitializeLifetimeService() |
Устаревшие..
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| Insert(Int32, Object) |
Вставляет элемент в список по указанному индексу. |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| MemberwiseClone(Boolean) |
Создает неглубокую копию текущего MarshalByRefObject объекта. (Унаследовано от MarshalByRefObject) |
| MoveFirst() |
Перемещается к первому элементу в списке. |
| MoveLast() |
Перемещается к последнему элементу в списке. |
| MoveNext() |
Перемещается к следующему элементу в списке. |
| MovePrevious() |
Перемещается к предыдущему элементу в списке. |
| OnAddingNew(AddingNewEventArgs) |
Вызывает событие AddingNew. |
| OnBindingComplete(BindingCompleteEventArgs) |
Вызывает событие BindingComplete. |
| OnCurrentChanged(EventArgs) |
Вызывает событие CurrentChanged. |
| OnCurrentItemChanged(EventArgs) |
Вызывает событие CurrentItemChanged. |
| OnDataError(BindingManagerDataErrorEventArgs) |
Вызывает событие DataError. |
| OnDataMemberChanged(EventArgs) |
Вызывает событие DataMemberChanged. |
| OnDataSourceChanged(EventArgs) |
Вызывает событие DataSourceChanged. |
| OnListChanged(ListChangedEventArgs) |
Вызывает событие ListChanged. |
| OnPositionChanged(EventArgs) |
Вызывает событие PositionChanged. |
| Remove(Object) |
Удаляет указанный элемент из списка. |
| RemoveAt(Int32) |
Удаляет элемент по указанному индексу в списке. |
| RemoveCurrent() |
Удаляет текущий элемент из списка. |
| RemoveFilter() |
Удаляет фильтр, связанный с .BindingSource |
| RemoveSort() |
Удаляет сортировку, связанную с .BindingSource |
| ResetAllowNew() |
Повторно инициализирует AllowNew свойство. |
| ResetBindings(Boolean) |
Вызывает элемент управления, привязанный к BindingSource повторному просмотру всех элементов в списке, и обновление отображаемых значений. |
| ResetCurrentItem() |
Вызывает элемент управления, привязанный к BindingSource повторному просмотру выбранного элемента, и обновление отображаемого значения. |
| ResetItem(Int32) |
Вызывает элемент управления, привязанный к BindingSource повторному просмотру элемента по указанному индексу, и обновление отображаемого значения. |
| ResumeBinding() |
Возобновляет привязку данных. |
| SuspendBinding() |
Приостанавливает привязку данных, чтобы предотвратить обновление связанного источника данных. |
| ToString() |
String Возвращает имя, содержащее имя , если таковое Componentимеется. Этот метод не должен быть переопределен. (Унаследовано от Component) |
События
| Имя | Описание |
|---|---|
| AddingNew |
Происходит перед добавлением элемента в базовый список. |
| BindingComplete |
Происходит, когда все клиенты были привязаны к этому BindingSource. |
| CurrentChanged |
Происходит при изменении текущего привязанного элемента. |
| CurrentItemChanged |
Происходит при изменении значения Current свойства свойства. |
| DataError |
Происходит, когда исключение, связанное с валютой, обрабатывается BindingSourceавтоматически. |
| DataMemberChanged |
Происходит, если значение свойства DataMember было изменено. |
| DataSourceChanged |
Происходит, если значение свойства DataSource было изменено. |
| Disposed |
Происходит при удалении компонента вызовом Dispose() метода. (Унаследовано от Component) |
| ListChanged |
Происходит при изменении базового списка или элемента в списке. |
| PositionChanged |
Происходит после изменения значения Position свойства. |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IBindingList.AddIndex(PropertyDescriptor) |
Добавляет в PropertyDescriptor индексы, используемые для поиска. |
| IBindingList.RemoveIndex(PropertyDescriptor) |
PropertyDescriptor Удаляет из индексов, используемых для поиска. |
| ICancelAddNew.CancelNew(Int32) |
Отменяет ожидающий новый элемент из коллекции. |
| ICancelAddNew.EndNew(Int32) |
Фиксирует ожидающий новый элемент в коллекции. |
| ISupportInitialize.BeginInit() |
Сигнализирует о начале BindingSource инициализации. |
| ISupportInitialize.EndInit() |
Сигнализирует о BindingSource завершении инициализации. |
| ISupportInitializeNotification.Initialized |
Происходит при BindingSource инициализации. |
| ISupportInitializeNotification.IsInitialized |
Возвращает значение, указывающее, инициализирован ли он BindingSource . |
Методы расширения
| Имя | Описание |
|---|---|
| AsParallel(IEnumerable) |
Включает параллелизацию запроса. |
| AsQueryable(IEnumerable) |
Преобразует IEnumerable в IQueryable. |
| Cast<TResult>(IEnumerable) |
Приведение элементов IEnumerable к указанному типу. |
| OfType<TResult>(IEnumerable) |
Фильтрует элементы IEnumerable на основе указанного типа. |