Partilhar via


BindingSource Classe

Definição

Encapsula a fonte de dados de um formulário.

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
Herança
Atributos
Implementações

Exemplos

O exemplo de código a seguir demonstra um ListBox associado a um BindingSource. O BindingSource está associado a um BindingList<T> que contém uma lista de fontes.

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

Comentários

O BindingSource componente atende a muitas finalidades. Primeiro, simplifica os controles de associação em um formulário para dados, fornecendo gerenciamento de moeda, notificação de alteração e outros serviços entre controles do Windows Forms e fontes de dados. Isso é feito anexando o BindingSource componente à fonte de dados usando a DataSource propriedade. Para cenários de associação complexos, opcionalmente, você pode definir a DataMember propriedade como uma coluna ou lista específica na fonte de dados. Em seguida, você associa os controles ao BindingSource. Toda a interação adicional com os dados é realizada com chamadas para o BindingSource componente. Para obter exemplos sobre como simplificar o BindingSource processo de associação, consulte Como associar controles do Windows Forms a valores de banco de dados DBNull e como lidar com erros e exceções que ocorrem com a vinculação de dados. A navegação e a atualização da fonte de dados são realizadas por meio de métodos como MoveNext, MoveLaste Remove. Operações como classificação e filtragem são tratadas por meio das propriedades e Filter da Sort classificação. Para obter mais informações sobre como usar a classificação e a filtragem com o BindingSource, consulte Como classificar e filtrar dados ADO.NET com o componente BindingSource do Windows Forms.

Além disso, o BindingSource componente pode atuar como uma fonte de dados fortemente tipada. Normalmente, o tipo da fonte de dados subjacente é corrigido por meio de um dos seguintes mecanismos:

  • Use o Add método para adicionar um item ao BindingSource componente.

  • Defina a DataSource propriedade como uma lista, objeto único ou tipo.

Esses dois mecanismos criam uma lista fortemente tipada. Para obter mais informações sobre como usar a associação BindingSource a um tipo, consulte Como associar um controle do Windows Forms a um tipo. Você também pode usar o BindingSource para associar seus controles a um objeto de fábrica. Para obter mais informações sobre como fazer isso, consulte Como associar um controle do Windows Forms a um objeto factory.

Observação

Como uma BindingSource manipula fontes de dados simples e complexas, a terminologia é problemática. Dentro dessa documentação de classe, a lista de termos refere-se a uma coleção de dados dentro da fonte de dados hospedada e o item indica um único elemento. Ao discutir a funcionalidade associada a fontes de dados complexas, a tabela e a linha de termos equivalentes são usadas.

BindingSource fornece membros para acessar os dados subjacentes. O item atual pode ser recuperado por meio da Current propriedade e toda a lista pode ser recuperada por meio da List propriedade. As operações de edição são compatíveis com o item atual por meio Current de , e , RemoveCurrentCancelEditEndEdite AddAddNew métodos. Embora o gerenciamento de moeda seja tratado automaticamente para todos os tipos de fonte de dados subjacentes, essa classe expõe vários eventos, como CurrentItemChanged e DataSourceChanged, que permitem a personalização.

As fontes de dados associadas a um BindingSource componente também podem ser navegadas e gerenciadas com a BindingNavigator classe, que fornece uma interface do usuário (interface do usuário) semelhante a VCR para navegar em itens em uma lista. Embora BindingNavigator possa ser associado a qualquer fonte de dados, ele foi projetado para se integrar a um BindingSource componente por meio de sua BindingNavigator.BindingSource propriedade.

A propriedade padrão da BindingSource classe é DataSource. O evento padrão é CurrentChanged.

Cuidado

Muitos dos membros da BindingSource classe operam na lista subjacente representada pela List propriedade e simplesmente referem sua operação à lista subjacente. Portanto, quando a BindingSource implementação é associada a uma implementação personalizada, IListo comportamento exato desses membros pode ser diferente do comportamento descrito na documentação da classe. Por exemplo, o RemoveAt método chama IList.RemoveAt. A BindingSource documentação descreve o RemoveAt método com a compreensão de que o RemoveAt método para o subjacente IList está implementado corretamente.

Construtores

Nome Description
BindingSource()

Inicializa uma nova instância da BindingSource classe para os valores de propriedade padrão.

BindingSource(IContainer)

Inicializa uma nova instância da BindingSource classe e adiciona o BindingSource contêiner especificado.

BindingSource(Object, String)

Inicializa uma nova instância da BindingSource classe com a fonte de dados e o membro de dados especificados.

Propriedades

Nome Description
AllowEdit

Obtém um valor que indica se os itens na lista subjacente podem ser editados.

AllowNew

Obtém ou define um valor que indica se o AddNew() método pode ser usado para adicionar itens à lista.

AllowRemove

Obtém um valor que indica se os itens podem ser removidos da lista subjacente.

CanRaiseEvents

Obtém um valor que indica se o componente pode gerar um evento.

(Herdado de Component)
Container

Obtém o IContainer que contém o Component.

(Herdado de Component)
Count

Obtém o número total de itens na lista subjacente, levando em consideração o valor atual Filter .

CurrencyManager

Obtém o gerenciador de moedas associado a isso BindingSource.

Current

Obtém o item atual na lista.

DataMember

Obtém ou define a lista específica na fonte de dados à qual o conector está atualmente associado.

DataSource

Obtém ou define a fonte de dados à qual o conector se associa.

DesignMode

Obtém um valor que indica se o Component está no modo de design no momento.

(Herdado de Component)
Events

Obtém a lista de manipuladores de eventos anexados a isso Component.

(Herdado de Component)
Filter

Obtém ou define a expressão usada para filtrar quais linhas são exibidas.

IsBindingSuspended

Obtém um valor que indica se a associação de lista está suspensa.

IsFixedSize

Obtém um valor que indica se a lista subjacente tem um tamanho fixo.

IsReadOnly

Obtém um valor que indica se a lista subjacente é somente leitura.

IsSorted

Obtém um valor que indica se os itens na lista subjacente são classificados.

IsSynchronized

Obtém um valor que indica se o acesso à coleção é sincronizado (thread safe).

Item[Int32]

Obtém ou define o elemento de lista no índice especificado.

List

Obtém a lista à qual o conector está associado.

Position

Obtém ou define o índice do item atual na lista subjacente.

RaiseListChangedEvents

Obtém ou define um valor que indica se ListChanged os eventos devem ser gerados.

Site

Obtém ou define o ISiteComponent.

(Herdado de Component)
Sort

Obtém ou define os nomes de coluna usados para classificação e a ordem de classificação para exibir as linhas na fonte de dados.

SortDescriptions

Obtém a coleção de descrições de classificação aplicadas à fonte de dados.

SortDirection

Obtém a direção em que os itens na lista são classificados.

SortProperty

Obtém o PropertyDescriptor que está sendo usado para classificar a lista.

SupportsAdvancedSorting

Obtém um valor que indica se a fonte de dados dá suporte à classificação de várias colunas.

SupportsChangeNotification

Obtém um valor que indica se a fonte de dados dá suporte à notificação de alteração.

SupportsFiltering

Obtém um valor que indica se a fonte de dados dá suporte à filtragem.

SupportsSearching

Obtém um valor que indica se a fonte de dados dá suporte à pesquisa com o Find(PropertyDescriptor, Object) método.

SupportsSorting

Obtém um valor que indica se a fonte de dados dá suporte à classificação.

SyncRoot

Obtém um objeto que pode ser usado para sincronizar o acesso à lista subjacente.

Métodos

Nome Description
Add(Object)

Adiciona um item existente à lista interna.

AddNew()

Adiciona um novo item à lista subjacente.

ApplySort(ListSortDescriptionCollection)

Classifica a fonte de dados com as descrições de classificação especificadas.

ApplySort(PropertyDescriptor, ListSortDirection)

Classifica a fonte de dados usando o descritor de propriedade especificado e a direção de classificação.

CancelEdit()

Cancela a operação de edição atual.

Clear()

Remove todos os elementos da lista.

Contains(Object)

Determina se um objeto é um item na lista.

CopyTo(Array, Int32)

Copia o conteúdo da List matriz especificada, começando pelo valor de índice especificado.

CreateObjRef(Type)

Cria um objeto que contém todas as informações relevantes necessárias para gerar um proxy usado para se comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
Dispose()

Libera todos os recursos usados pelo Component.

(Herdado de Component)
Dispose(Boolean)

Libera os recursos não gerenciados usados pelo BindingSource e, opcionalmente, libera os recursos gerenciados.

EndEdit()

Aplica alterações pendentes à fonte de dados subjacente.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Find(PropertyDescriptor, Object)

Pesquisa o índice do item que tem o descritor de propriedade fornecido.

Find(String, Object)

Retorna o índice do item na lista com o nome e o valor da propriedade especificados.

GetEnumerator()

Recupera um enumerador para o List.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetItemProperties(PropertyDescriptor[])

Recupera uma matriz de PropertyDescriptor objetos que representa as propriedades associáveis do tipo de lista de fontes de dados.

GetLifetimeService()
Obsoleto.

Recupera o objeto de serviço de tempo de vida atual que controla a política de tempo de vida para essa instância.

(Herdado de MarshalByRefObject)
GetListName(PropertyDescriptor[])

Obtém o nome da lista que fornece dados para a associação.

GetRelatedCurrencyManager(String)

Obtém o gerenciador de moedas relacionado para o membro de dados especificado.

GetService(Type)

Retorna um objeto que representa um serviço fornecido pelo Component ou por sua Container.

(Herdado de Component)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IndexOf(Object)

Pesquisa o objeto especificado e retorna o índice da primeira ocorrência dentro de toda a lista.

InitializeLifetimeService()
Obsoleto.

Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida dessa instância.

(Herdado de MarshalByRefObject)
Insert(Int32, Object)

Insere um item na lista no índice especificado.

MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
MoveFirst()

Move para o primeiro item da lista.

MoveLast()

Passa para o último item da lista.

MoveNext()

Passa para o próximo item da lista.

MovePrevious()

Move para o item anterior na lista.

OnAddingNew(AddingNewEventArgs)

Aciona o evento AddingNew.

OnBindingComplete(BindingCompleteEventArgs)

Aciona o evento BindingComplete.

OnCurrentChanged(EventArgs)

Aciona o evento CurrentChanged.

OnCurrentItemChanged(EventArgs)

Aciona o evento CurrentItemChanged.

OnDataError(BindingManagerDataErrorEventArgs)

Aciona o evento DataError.

OnDataMemberChanged(EventArgs)

Aciona o evento DataMemberChanged.

OnDataSourceChanged(EventArgs)

Aciona o evento DataSourceChanged.

OnListChanged(ListChangedEventArgs)

Aciona o evento ListChanged.

OnPositionChanged(EventArgs)

Aciona o evento PositionChanged.

Remove(Object)

Remove o item especificado da lista.

RemoveAt(Int32)

Remove o item no índice especificado na lista.

RemoveCurrent()

Remove o item atual da lista.

RemoveFilter()

Remove o filtro associado ao BindingSource.

RemoveSort()

Remove a classificação associada ao BindingSource.

ResetAllowNew()

Reinicializa a AllowNew propriedade.

ResetBindings(Boolean)

Faz com que um controle associado à BindingSource releitura de todos os itens da lista e atualize seus valores exibidos.

ResetCurrentItem()

Faz com que um controle associado à BindingSource releitura do item selecionado no momento e atualize seu valor exibido.

ResetItem(Int32)

Faz com que um controle associado à BindingSource releitura do item no índice especificado e atualize seu valor exibido.

ResumeBinding()

Retoma a associação de dados.

SuspendBinding()

Suspende a associação de dados para impedir que as alterações atualizem a fonte de dados associada.

ToString()

Retorna um String que contém o nome do Component, se houver. Esse método não deve ser substituído.

(Herdado de Component)

Eventos

Nome Description
AddingNew

Ocorre antes de um item ser adicionado à lista subjacente.

BindingComplete

Ocorre quando todos os clientes foram associados a isso BindingSource.

CurrentChanged

Ocorre quando o item associado atualmente é alterado.

CurrentItemChanged

Ocorre quando um valor de propriedade da Current propriedade é alterado.

DataError

Ocorre quando uma exceção relacionada à moeda é tratada silenciosamente pelo BindingSource.

DataMemberChanged

Ocorre quando o valor da propriedade DataMember é alterado.

DataSourceChanged

Ocorre quando o valor da propriedade DataSource é alterado.

Disposed

Ocorre quando o componente é descartado por uma chamada para o Dispose() método.

(Herdado de Component)
ListChanged

Ocorre quando a lista subjacente é alterada ou um item na lista é alterado.

PositionChanged

Ocorre depois que o valor da Position propriedade é alterado.

Implantações explícitas de interface

Nome Description
IBindingList.AddIndex(PropertyDescriptor)

Adiciona os PropertyDescriptor índices usados para pesquisa.

IBindingList.RemoveIndex(PropertyDescriptor)

Remove os PropertyDescriptor índices usados para pesquisa.

ICancelAddNew.CancelNew(Int32)

Descarta um novo item pendente da coleção.

ICancelAddNew.EndNew(Int32)

Confirma um novo item pendente para a coleção.

ISupportInitialize.BeginInit()

Sinaliza que a BindingSource inicialização está sendo iniciada.

ISupportInitialize.EndInit()

Sinaliza que a BindingSource inicialização está concluída.

ISupportInitializeNotification.Initialized

Ocorre quando o BindingSource valor é inicializado.

ISupportInitializeNotification.IsInitialized

Obtém um valor que indica se o BindingSource valor é inicializado.

Métodos de Extensão

Nome Description
AsParallel(IEnumerable)

Habilita a paralelização de uma consulta.

AsQueryable(IEnumerable)

Converte um IEnumerable em um IQueryable.

Cast<TResult>(IEnumerable)

Converte os elementos de um IEnumerable para o tipo especificado.

OfType<TResult>(IEnumerable)

Filtra os elementos de um IEnumerable com base em um tipo especificado.

Aplica-se a

Confira também