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


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.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace BindingSourceExamples
{
    public class Form1 : Form
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }

        public Form1()
        {
            this.Load += new EventHandler(Form1_Load);
        }

        private TextBox textBox1;
        private Button button1;
        private ListBox listBox1;
       
        private BindingSource binding1;
        void Form1_Load(object sender, EventArgs e)
        {
            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";
            button1.Click += new EventHandler(this.button1_Click);
            this.ClientSize = new Size(292, 266);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.listBox1);

            MyFontList fonts = new MyFontList();
            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";
        }

        private 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
        {
            get { return 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.ToLower() == ((string)key).ToLower())
                    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 элементами управления и источниками данных. Это достигается путем присоединения компонента к источнику BindingSourceDataSource данных с помощью свойства . Для сложных сценариев привязки можно при необходимости задать 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 как простые, так и сложные источники данных, терминология является проблематичной. В этой документации по классу термин list относится к коллекции данных в размещенном источнике данных, а элемент обозначает один элемент. При обсуждении функциональных возможностей, связанных со сложными источниками данных, используются эквивалентные термины table и row .

BindingSource предоставляет элементы для доступа к базовым данным. Текущий элемент можно получить с помощью Current свойства , а весь список — с помощью List свойства . Операции редактирования поддерживаются для текущего элемента с помощью Current методов и RemoveCurrent, EndEditCancelEdit и .AddNewAdd Хотя управление валютой обрабатывается автоматически для всех базовых типов источников данных, этот класс предоставляет ряд событий, таких как CurrentItemChanged и DataSourceChanged, которые позволяют настраивать.

К источникам данных, привязанным к компоненту BindingSource , также можно перемещаться и управлять ими с помощью BindingNavigator класса , который предоставляет пользовательский интерфейс, подобный VCR, для перемещения по элементам в списке. Хотя 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.

Методы расширения

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.

AsQueryable(IEnumerable)

Преобразовывает коллекцию IEnumerable в объект IQueryable.

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

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