Поделиться через


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 на основе указанного типа.

Применяется к

См. также раздел