Condividi tramite


BindingSource Classe

Definizione

Incapsula l'origine dati per un modulo.

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
Ereditarietà
Attributi
Implementazioni

Esempio

Nell'esempio di codice seguente viene illustrato un ListBox oggetto associato a un oggetto BindingSource. È BindingSource associato a un BindingList<T> oggetto che contiene un elenco di tipi di carattere.

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

Commenti

Il BindingSource componente svolge molti scopi. In primo luogo, semplifica l'associazione dei controlli in un modulo ai dati fornendo gestione delle valute, notifica delle modifiche e altri servizi tra controlli Windows Form e origini dati. Questa operazione viene eseguita collegando il componente all'origine BindingSource dati usando la DataSource proprietà . Per scenari di associazione complessi è possibile impostare facoltativamente la DataMember proprietà su una colonna o un elenco specifico nell'origine dati. Si associano quindi i controlli a BindingSource. Tutte le altre interazioni con i dati vengono eseguite con le chiamate al BindingSource componente. Per esempi su come BindingSource semplificare il processo di associazione, vedere Procedura: Associare controlli Windows Form ai valori del database DBNull e Procedura: Gestire errori ed eccezioni che si verificano con databinding. Lo spostamento e l'aggiornamento dell'origine dati vengono eseguiti tramite metodi quali MoveNext, MoveLaste Remove. Le operazioni come l'ordinamento e il filtro vengono gestite tramite le Sort proprietà e Filter . Per altre informazioni sull'uso dell'ordinamento e del filtro con BindingSource, vedere Procedura: Ordinare e filtrare ADO.NET dati con il componente BindingSource di Windows Form.

Inoltre, il BindingSource componente può fungere da origine dati fortemente tipizzata. In genere il tipo dell'origine dati sottostante viene corretto tramite uno dei meccanismi seguenti:

  • Utilizzare il Add metodo per aggiungere un elemento al BindingSource componente.

  • Impostare la DataSource proprietà su un elenco, un singolo oggetto o un tipo.

Entrambi questi meccanismi creano un elenco fortemente tipizzato. Per altre informazioni su come utilizzare per eseguire l'associazione BindingSource a un tipo, vedere Procedura: Associare un controllo Windows Form a un tipo. È anche possibile utilizzare BindingSource per associare i controlli a un oggetto factory. Per altre informazioni su come eseguire questa operazione, vedere Procedura: Associare un controllo Windows Form a un oggetto Factory.

Annotazioni

Poiché un BindingSource oggetto gestisce origini dati semplici e complesse, la terminologia è problematica. All'interno di questa documentazione di classe, il termine list fa riferimento a una raccolta di dati all'interno dell'origine dati ospitata e l'elemento indica un singolo elemento. Quando si illustrano le funzionalità associate a origini dati complesse, vengono usati i termini equivalenti tabella e riga .

BindingSource fornisce membri per l'accesso ai dati sottostanti. L'elemento corrente può essere recuperato tramite la Current proprietà e l'intero elenco può essere recuperato tramite la List proprietà . Le operazioni di modifica sono supportate nell'elemento corrente tramite e i RemoveCurrentmetodi , CancelEditEndEdite .AddAddNewCurrent Anche se la gestione della valuta viene gestita automaticamente per tutti i tipi di origine dati sottostanti, questa classe espone una serie di eventi, ad esempio CurrentItemChanged e DataSourceChanged, che consentono la personalizzazione.

Le origini dati associate a un BindingSource componente possono anche essere spostate e gestite con la BindingNavigator classe , che fornisce un'interfaccia utente simile a VCR per lo spostamento di elementi all'interno di un elenco. Anche se BindingNavigator può essere associato a qualsiasi origine dati, è stato progettato per l'integrazione con un BindingSource componente tramite la relativa BindingNavigator.BindingSource proprietà.

La proprietà predefinita per la BindingSource classe è DataSource. L'evento predefinito è CurrentChanged.

Attenzione

Molti dei membri della BindingSource classe operano sull'elenco sottostante rappresentato dalla List proprietà e fanno semplicemente riferimento all'elenco sottostante. Pertanto, quando BindingSource è associato a un'implementazione personalizzata di IList, il comportamento esatto di questi membri può differire dal comportamento descritto nella documentazione della classe. Ad esempio, il RemoveAt metodo chiama IList.RemoveAt. La BindingSource documentazione descrive il RemoveAt metodo con la comprensione che il RemoveAt metodo per l'oggetto sottostante IList è implementato correttamente.

Costruttori

Nome Descrizione
BindingSource()

Inizializza una nuova istanza della BindingSource classe sui valori di proprietà predefiniti.

BindingSource(IContainer)

Inizializza una nuova istanza della BindingSource classe e aggiunge l'oggetto BindingSource al contenitore specificato.

BindingSource(Object, String)

Inizializza una nuova istanza della BindingSource classe con l'origine dati e il membro dati specificati.

Proprietà

Nome Descrizione
AllowEdit

Ottiene un valore che indica se è possibile modificare gli elementi nell'elenco sottostante.

AllowNew

Ottiene o imposta un valore che indica se il AddNew() metodo può essere utilizzato per aggiungere elementi all'elenco.

AllowRemove

Ottiene un valore che indica se gli elementi possono essere rimossi dall'elenco sottostante.

CanRaiseEvents

Ottiene un valore che indica se il componente può generare un evento.

(Ereditato da Component)
Container

Ottiene l'oggetto IContainer contenente l'oggetto Component.

(Ereditato da Component)
Count

Ottiene il numero totale di elementi nell'elenco sottostante, prendendo in considerazione il valore corrente Filter .

CurrencyManager

Ottiene il gestore di valuta associato all'oggetto BindingSource.

Current

Ottiene l'elemento corrente nell'elenco.

DataMember

Ottiene o imposta l'elenco specifico nell'origine dati a cui il connettore è attualmente associato.

DataSource

Ottiene o imposta l'origine dati a cui è associato il connettore.

DesignMode

Ottiene un valore che indica se è Component attualmente in modalità progettazione.

(Ereditato da Component)
Events

Ottiene l'elenco dei gestori eventi associati a questo Componentoggetto .

(Ereditato da Component)
Filter

Ottiene o imposta l'espressione utilizzata per filtrare le righe visualizzate.

IsBindingSuspended

Ottiene un valore che indica se l'associazione elenco è sospesa.

IsFixedSize

Ottiene un valore che indica se l'elenco sottostante ha una dimensione fissa.

IsReadOnly

Ottiene un valore che indica se l'elenco sottostante è di sola lettura.

IsSorted

Ottiene un valore che indica se gli elementi nell'elenco sottostante sono ordinati.

IsSynchronized

Ottiene un valore che indica se l'accesso alla raccolta è sincronizzato (thread-safe).

Item[Int32]

Ottiene o imposta l'elemento list in corrispondenza dell'indice specificato.

List

Ottiene l'elenco a cui è associato il connettore.

Position

Ottiene o imposta l'indice dell'elemento corrente nell'elenco sottostante.

RaiseListChangedEvents

Ottiene o imposta un valore che indica se ListChanged gli eventi devono essere generati.

Site

Ottiene o imposta l'oggetto ISite dell'oggetto Component.

(Ereditato da Component)
Sort

Ottiene o imposta i nomi di colonna utilizzati per l'ordinamento e l'ordinamento per la visualizzazione delle righe nell'origine dati.

SortDescriptions

Ottiene la raccolta di descrizioni di ordinamento applicate all'origine dati.

SortDirection

Ottiene la direzione in cui vengono ordinati gli elementi nell'elenco.

SortProperty

Ottiene l'oggetto PropertyDescriptor utilizzato per l'ordinamento dell'elenco.

SupportsAdvancedSorting

Ottiene un valore che indica se l'origine dati supporta l'ordinamento a più colonne.

SupportsChangeNotification

Ottiene un valore che indica se l'origine dati supporta la notifica delle modifiche.

SupportsFiltering

Ottiene un valore che indica se l'origine dati supporta il filtro.

SupportsSearching

Ottiene un valore che indica se l'origine dati supporta la ricerca con il Find(PropertyDescriptor, Object) metodo .

SupportsSorting

Ottiene un valore che indica se l'origine dati supporta l'ordinamento.

SyncRoot

Ottiene un oggetto che può essere utilizzato per sincronizzare l'accesso all'elenco sottostante.

Metodi

Nome Descrizione
Add(Object)

Aggiunge un elemento esistente all'elenco interno.

AddNew()

Aggiunge un nuovo elemento all'elenco sottostante.

ApplySort(ListSortDescriptionCollection)

Ordina l'origine dati con le descrizioni di ordinamento specificate.

ApplySort(PropertyDescriptor, ListSortDirection)

Ordina l'origine dati usando il descrittore di proprietà e la direzione di ordinamento specificati.

CancelEdit()

Annulla l'operazione di modifica corrente.

Clear()

Rimuove tutti gli elementi dall'elenco.

Contains(Object)

Determina se un oggetto è un elemento nell'elenco.

CopyTo(Array, Int32)

Copia il contenuto dell'oggetto List nella matrice specificata, a partire dal valore di indice specificato.

CreateObjRef(Type)

Crea un oggetto che contiene tutte le informazioni pertinenti necessarie per generare un proxy utilizzato per comunicare con un oggetto remoto.

(Ereditato da MarshalByRefObject)
Dispose()

Rilascia tutte le risorse usate da Component.

(Ereditato da Component)
Dispose(Boolean)

Rilascia le risorse non gestite usate da BindingSource e, facoltativamente, rilascia le risorse gestite.

EndEdit()

Applica le modifiche in sospeso all'origine dati sottostante.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
Find(PropertyDescriptor, Object)

Cerca l'indice dell'elemento con il descrittore di proprietà specificato.

Find(String, Object)

Restituisce l'indice dell'elemento nell'elenco con il nome e il valore della proprietà specificati.

GetEnumerator()

Recupera un enumeratore per l'oggetto List.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetItemProperties(PropertyDescriptor[])

Recupera una matrice di PropertyDescriptor oggetti che rappresentano le proprietà associabili del tipo di elenco di origini dati.

GetLifetimeService()
Obsoleti.

Recupera l'oggetto servizio di durata corrente che controlla i criteri di durata per questa istanza.

(Ereditato da MarshalByRefObject)
GetListName(PropertyDescriptor[])

Ottiene il nome dell'elenco che fornisce i dati per l'associazione.

GetRelatedCurrencyManager(String)

Ottiene il gestore valuta correlato per il membro dati specificato.

GetService(Type)

Restituisce un oggetto che rappresenta un servizio fornito da Component o da Container.

(Ereditato da Component)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
IndexOf(Object)

Cerca l'oggetto specificato e restituisce l'indice della prima occorrenza all'interno dell'intero elenco.

InitializeLifetimeService()
Obsoleti.

Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza.

(Ereditato da MarshalByRefObject)
Insert(Int32, Object)

Inserisce un elemento nell'elenco in corrispondenza dell'indice specificato.

MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
MemberwiseClone(Boolean)

Crea una copia superficiale dell'oggetto corrente MarshalByRefObject .

(Ereditato da MarshalByRefObject)
MoveFirst()

Passa al primo elemento dell'elenco.

MoveLast()

Passa all'ultimo elemento dell'elenco.

MoveNext()

Passa all'elemento successivo nell'elenco.

MovePrevious()

Passa all'elemento precedente nell'elenco.

OnAddingNew(AddingNewEventArgs)

Genera l'evento AddingNew.

OnBindingComplete(BindingCompleteEventArgs)

Genera l'evento BindingComplete.

OnCurrentChanged(EventArgs)

Genera l'evento CurrentChanged.

OnCurrentItemChanged(EventArgs)

Genera l'evento CurrentItemChanged.

OnDataError(BindingManagerDataErrorEventArgs)

Genera l'evento DataError.

OnDataMemberChanged(EventArgs)

Genera l'evento DataMemberChanged.

OnDataSourceChanged(EventArgs)

Genera l'evento DataSourceChanged.

OnListChanged(ListChangedEventArgs)

Genera l'evento ListChanged.

OnPositionChanged(EventArgs)

Genera l'evento PositionChanged.

Remove(Object)

Rimuove l'elemento specificato dall'elenco.

RemoveAt(Int32)

Rimuove l'elemento in corrispondenza dell'indice specificato nell'elenco.

RemoveCurrent()

Rimuove l'elemento corrente dall'elenco.

RemoveFilter()

Rimuove il filtro associato all'oggetto BindingSource.

RemoveSort()

Rimuove l'ordinamento associato all'oggetto BindingSource.

ResetAllowNew()

Reinizializza la AllowNew proprietà .

ResetBindings(Boolean)

Fa sì che un controllo associato all'oggetto BindingSource rilegge tutti gli elementi nell'elenco e aggiorni i relativi valori visualizzati.

ResetCurrentItem()

Fa sì che un controllo associato all'oggetto BindingSource rilegge l'elemento attualmente selezionato e aggiorni il valore visualizzato.

ResetItem(Int32)

Fa in modo che un controllo associato all'oggetto BindingSource rilegge l'elemento in corrispondenza dell'indice specificato e aggiorni il valore visualizzato.

ResumeBinding()

Riprende il data binding.

SuspendBinding()

Sospende il data binding per impedire alle modifiche di aggiornare l'origine dati associata.

ToString()

Restituisce un oggetto String contenente il nome dell'oggetto Component, se presente. Questo metodo non deve essere sottoposto a override.

(Ereditato da Component)

Eventi

Nome Descrizione
AddingNew

Si verifica prima dell'aggiunta di un elemento all'elenco sottostante.

BindingComplete

Si verifica quando tutti i client sono stati associati a questo BindingSourceoggetto .

CurrentChanged

Si verifica quando l'elemento attualmente associato cambia.

CurrentItemChanged

Si verifica quando viene modificato un valore della Current proprietà .

DataError

Si verifica quando un'eccezione BindingSourcecorrelata alla valuta viene gestita automaticamente da .

DataMemberChanged

Si verifica quando viene modificato il valore della proprietà DataMember.

DataSourceChanged

Si verifica quando viene modificato il valore della proprietà DataSource.

Disposed

Si verifica quando il componente viene eliminato da una chiamata al Dispose() metodo .

(Ereditato da Component)
ListChanged

Si verifica quando l'elenco sottostante cambia o un elemento nell'elenco cambia.

PositionChanged

Si verifica dopo la modifica del valore della Position proprietà.

Implementazioni dell'interfaccia esplicita

Nome Descrizione
IBindingList.AddIndex(PropertyDescriptor)

Aggiunge l'oggetto PropertyDescriptor agli indici utilizzati per la ricerca.

IBindingList.RemoveIndex(PropertyDescriptor)

Rimuove l'oggetto PropertyDescriptor dagli indici utilizzati per la ricerca.

ICancelAddNew.CancelNew(Int32)

Rimuove un nuovo elemento in sospeso dalla raccolta.

ICancelAddNew.EndNew(Int32)

Esegue il commit di un nuovo elemento in sospeso nella raccolta.

ISupportInitialize.BeginInit()

Segnala l'avvio dell'inizializzazione BindingSource .

ISupportInitialize.EndInit()

Segnala che l'inizializzazione BindingSource è stata completata.

ISupportInitializeNotification.Initialized

Si verifica quando l'oggetto BindingSource viene inizializzato.

ISupportInitializeNotification.IsInitialized

Ottiene un valore che indica se l'oggetto BindingSource è inizializzato.

Metodi di estensione

Nome Descrizione
AsParallel(IEnumerable)

Abilita la parallelizzazione di una query.

AsQueryable(IEnumerable)

Converte un IEnumerable in un IQueryable.

Cast<TResult>(IEnumerable)

Esegue il cast degli elementi di un IEnumerable al tipo specificato.

OfType<TResult>(IEnumerable)

Filtra gli elementi di un IEnumerable in base a un tipo specificato.

Si applica a

Vedi anche