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
[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")>]
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
Public Class BindingSource
Inherits Component
Implements IBindingListView, ICancelAddNew, ICurrencyManagerProvider, IList, ISupportInitializeNotification, ITypedList
Herança
Atributos
Implementações

Exemplos

O exemplo de código seguinte demonstra um ListBox limite a um BindingSource. O BindingSource está ligado a BindingList<T> a 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

Observações

O BindingSource componente serve para muitos propósitos. Primeiro, simplifica a vinculação dos controlos de um formulário aos dados, fornecendo gestão de moeda, notificação de alterações e outros serviços entre controlos do Windows Forms e fontes de dados. Isto é conseguido ao anexar o BindingSource componente à sua fonte de dados usando a DataSource propriedade. Para cenários complexos de ligação, pode, opcionalmente, definir a DataMember propriedade para uma coluna ou lista específica na fonte de dados. Depois atribuis os controlos ao BindingSource. Toda a interação posterior com os dados é realizada através de chamadas ao BindingSource componente. Para exemplos sobre como o BindingSource pode simplificar o processo de ligação, veja Como: Vincular Windows Forms Controlos aos Valores da Base de Dados DBNull e Como: Lidar com Erros e Exceções que Ocorrem com Databinding. A navegação e atualização da fonte de dados é realizada através de métodos como MoveNext, MoveLast, e Remove. Operações como ordenação e filtragem são tratadas através das Sort propriedades e.Filter Para mais informações sobre a utilização de ordenação e filtragem com o BindingSource, veja Como: Ordenar e Filtrar ADO.NET Dados com o Windows Forms BindingSource Component.

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

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

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

Ambos estes mecanismos criam uma lista fortemente tipada. Para mais informações sobre como usar o BindingSource para ligar a um tipo, veja Como: Associar um controlo de Windows Forms a um Tipo. Também podes usar o BindingSource para associar os teus controlos a um objeto de fábrica. Para mais informações sobre como fazer isto, veja Como: Associar um controlo de Windows Forms a um Objeto de Fábrica.

Note

Como a BindingSource lida com fontes de dados simples e complexas, a terminologia é problemática. Dentro desta documentação de classe, o termo lista refere-se a uma recolha de dados dentro da fonte de dados alojada, e o item denota um único elemento. Ao discutir funcionalidades associadas a fontes de dados complexas, utilizam-se os termos equivalentes tabela e linha .

BindingSource fornece membros para aceder aos dados subjacentes. O item atual pode ser recuperado através da Current propriedade, e a lista completa pode ser recuperada através da List propriedade. As operações de edição são suportadas no item atual através dos CurrentRemoveCurrentmétodos , EndEdit, CancelEdit e Add e AddNew . Embora a gestão da moeda seja gerida automaticamente para todos os tipos de fontes de dados subjacentes, esta classe expõe vários eventos, como CurrentItemChanged e DataSourceChanged, que permitem a personalização.

As fontes de dados ligadas a um BindingSource componente também podem ser navegadas e geridas com a BindingNavigator classe, que fornece uma interface de utilizador (UI) semelhante a um VCR para navegar nos itens dentro de uma lista. Embora BindingNavigator possa estar ligado a qualquer fonte de dados, foi concebido para se integrar com um BindingSource componente através da sua BindingNavigator.BindingSource propriedade.

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

Caution

Muitos dos membros da BindingSource classe operam sobre a lista subjacente representada pela List propriedade e simplesmente encaminham a sua operação para a lista subjacente. Portanto, quando o BindingSource está ligado a uma implementação personalizada de IList, o comportamento exato destes membros pode diferir 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á corretamente implementado.

Construtores

Name Description
BindingSource()

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

BindingSource(IContainer)

Inicializa uma nova instância da BindingSource classe e adiciona o BindingSource ao contentor especificado.

BindingSource(Object, String)

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

Propriedades

Name Description
AllowEdit

Recebe um valor que indica se os itens da lista subjacente podem ser editados.

AllowNew

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

AllowRemove

Recebe 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, tendo em conta o valor atual Filter .

CurrencyManager

Fica com o gestor de moedas associado a isto BindingSource.

Current

Recebe o item atual da lista.

DataMember

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

DataSource

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

DesignMode

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

(Herdado de Component)
Events

Obtém a lista de gestores de eventos que estão ligados a isto Component.

(Herdado de Component)
Filter

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

IsBindingSuspended

Recebe um valor que indica se a ligação da lista está suspensa.

IsFixedSize

Recebe um valor que indica se a lista subjacente tem um tamanho fixo.

IsReadOnly

Recebe um valor que indica se a lista subjacente é apenas de leitura.

IsSorted

Recebe um valor que indica se os itens da lista subjacente estão ordenados.

IsSynchronized

Recebe um valor que indica se o acesso à coleção está sincronizado (thread safe).

Item[Int32]

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

List

Obtém a lista a que o conector está ligado.

Position

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

RaiseListChangedEvents

Recebe ou define um valor que indica se ListChanged os eventos devem ser elevados.

Site

Obtém ou define o ISite do Component.

(Herdado de Component)
Sort

Obtém ou define os nomes das colunas usados para a ordenação e a ordem de ordenação para visualizar as linhas na fonte de dados.

SortDescriptions

Aplica a coleção de descrições de ordenação à fonte de dados.

SortDirection

Mostra a direção em que os itens da lista estão organizados.

SortProperty

Obtém o PropertyDescriptor que está a ser usado para ordenar a lista.

SupportsAdvancedSorting

Obtém um valor que indica se a fonte de dados suporta ordenação multi-coluna.

SupportsChangeNotification

Recebe um valor que indica se a fonte de dados suporta notificação de alterações.

SupportsFiltering

Recebe um valor que indica se a fonte de dados suporta filtragem.

SupportsSearching

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

SupportsSorting

Recebe um valor que indica se a fonte de dados suporta ordenação.

SyncRoot

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

Métodos

Name Description
Add(Object)

Adiciona um item existente à lista interna.

AddNew()

Adiciona um novo item à lista subjacente.

ApplySort(ListSortDescriptionCollection)

Ordena a fonte de dados com as descrições de ordenação especificadas.

ApplySort(PropertyDescriptor, ListSortDirection)

Ordena a fonte de dados usando o descritor de propriedade especificado e a direção de ordenaçã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 do List para o array especificado, começando no valor do índice especificado.

CreateObjRef(Type)

Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
Dispose()

Liberta todos os recursos utilizados pelo Component.

(Herdado de Component)
Dispose(Boolean)

Liberta os recursos não geridos usados pelo BindingSource e opcionalmente liberta os recursos geridos.

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)

Procura o índice do item que tem o descritor de propriedade dado.

Find(String, Object)

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

GetEnumerator()

Recupera um enumerador para o List.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetItemProperties(PropertyDescriptor[])

Recupera um array de PropertyDescriptor objetos que representam as propriedades vinculáveis do tipo de lista de fonte de dados.

GetLifetimeService()

Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso.

(Herdado de MarshalByRefObject)
GetListName(PropertyDescriptor[])

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

GetRelatedCurrencyManager(String)

Obtém o gestor de moeda relacionado para o membro de dados especificado.

GetService(Type)

Devolve um objeto que representa um serviço fornecido pelo Component ou pelo seu 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()

Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso.

(Herdado de MarshalByRefObject)
Insert(Int32, Object)

Insere um item na lista no índice especificado.

MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
MoveFirst()

Passa para o primeiro item da lista.

MoveLast()

Avança para o último item da lista.

MoveNext()

Passa para o item seguinte da lista.

MovePrevious()

Avança para o item anterior da lista.

OnAddingNew(AddingNewEventArgs)

Eleva o AddingNew evento.

OnBindingComplete(BindingCompleteEventArgs)

Eleva o BindingComplete evento.

OnCurrentChanged(EventArgs)

Eleva o CurrentChanged evento.

OnCurrentItemChanged(EventArgs)

Eleva o CurrentItemChanged evento.

OnDataError(BindingManagerDataErrorEventArgs)

Eleva o DataError evento.

OnDataMemberChanged(EventArgs)

Eleva o DataMemberChanged evento.

OnDataSourceChanged(EventArgs)

Eleva o DataSourceChanged evento.

OnListChanged(ListChangedEventArgs)

Eleva o ListChanged evento.

OnPositionChanged(EventArgs)

Eleva o PositionChanged evento.

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 o tipo associado ao BindingSource.

ResetAllowNew()

Reinicializa a AllowNew propriedade.

ResetBindings(Boolean)

Faz com que um controlo atribuído a releia BindingSource todos os itens da lista e atualize os seus valores apresentados.

ResetCurrentItem()

Faz com que um controlo associado a releia BindingSource o item atualmente selecionado e atualize o seu valor apresentado.

ResetItem(Int32)

Faz com que um controlo atribuído a releia BindingSource o item no índice especificado e atualize o seu valor apresentado.

ResumeBinding()

Retoma a ligação de dados.

SuspendBinding()

Suspende a ligação de dados para evitar que alterações atualizem a fonte de dados vinculada.

ToString()

Devolve a String contendo o nome do Component, se existir. Este método não deve ser ultrapassado.

(Herdado de Component)

evento

Name Description
AddingNew

Ocorre antes de um item ser adicionado à lista subjacente.

BindingComplete

Ocorre quando todos os clientes estão ligados a este BindingSource.

CurrentChanged

Ocorre quando o item atualmente vinculado muda.

CurrentItemChanged

Ocorre quando o valor Current de uma propriedade mudou.

DataError

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

DataMemberChanged

Ocorre quando o valor da propriedade DataMember foi alterado.

DataSourceChanged

Ocorre quando o valor da propriedade DataSource foi alterado.

Disposed

Ocorre quando o componente é eliminado por uma chamada ao Dispose() método.

(Herdado de Component)
ListChanged

Ocorre quando a lista subjacente muda ou um item da lista muda.

PositionChanged

Ocorre depois de o valor da Position propriedade ter mudado.

Implementações de Interface Explícita

Name Description
IBindingList.AddIndex(PropertyDescriptor)

Adiciona o PropertyDescriptor aos índices usados para pesquisas.

IBindingList.RemoveIndex(PropertyDescriptor)

Remove o PropertyDescriptor dos índices usados para pesquisa.

ICancelAddNew.CancelNew(Int32)

Descarta um novo item pendente da coleção.

ICancelAddNew.EndNew(Int32)

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

ISupportInitialize.BeginInit()

Sinaliza que BindingSource a inicialização está a começar.

ISupportInitialize.EndInit()

Sinaliza que BindingSource a inicialização está completa.

ISupportInitializeNotification.Initialized

Ocorre quando o BindingSource é inicializado.

ISupportInitializeNotification.IsInitialized

Recebe um valor que indica se o BindingSource está inicializado.

Métodos da Extensão

Name Description
AsParallel(IEnumerable)

Permite a paralelização de uma consulta.

AsQueryable(IEnumerable)

Converte um IEnumerable para um IQueryable.

Cast<TResult>(IEnumerable)

Conjura os elementos de an IEnumerable para o tipo especificado.

OfType<TResult>(IEnumerable)

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

Aplica-se a

Ver também