Condividi tramite


Architettura del componente BindingSource

Con il componente BindingSource, è possibile associare tutti i controlli Windows Form alle origini dati a livello universale.

Il componente BindingSource semplifica il processo di associazione dei controlli a un'origine dati e offre i seguenti vantaggi rispetto all'associazione dati tradizionale:

  • Consente l'associazione agli oggetti business in fase di progettazione.

  • Incapsula le funzionalità della classe CurrencyManager ed espone gli eventi CurrencyManager in fase di progettazione.

  • Semplifica la creazione di un elenco che supporta l'interfaccia IBindingList fornendo la notifica delle eventuali modifiche nell'elenco per le origini dati che non supportano tale notifica a livello nativo.

  • Fornisce un punto di estendibilità per il metodo IBindingList.AddNew.

  • Fornisce un livello di riferimento indiretto tra l'origine dati e il controllo. Questa caratteristica è importante quando esiste la possibilità che l'origine dati cambi in fase di esecuzione.

  • Consente di interoperare con altri controlli Windows Form correlati ai dati, in particolare il controllo BindingNavigator e i controlli DataGridView.

Per questi motivi il componente BindingSource rappresenta il modo ottimale per associare i controlli Windows Form alle origini dati.

Funzionalità di BindingSource

Il componente BindingSource fornisce diverse funzionalità per l'associazione dei controlli ai dati, che consentono di implementare la maggior parte degli scenari di associazione dati con l'aggiunta di un semplice codice.

Ciò è possibile in quanto il componente BindingSource fornisce un'interfaccia coerente per l'accesso a molti tipi di origini dati diversi. Ciò significa che è possibile utilizzare la stessa procedura per l'associazione a qualsiasi tipo. È ad esempio possibile collegare la proprietà DataSource a un DataSet o a un oggetto business e in entrambi i casi si utilizza lo stesso insieme di proprietà, metodi ed eventi per modificare l'origine dati.

L'interfaccia coerente fornita dal componente BindingSource semplifica notevolmente il processo di associazione tra dati e controlli. Per i tipi di origini dati che supportano la notifica delle modifiche, il componente BindingSource comunica automaticamente le modifiche verificatesi tra il controllo e l'origine dati. Per i tipi di origini dati che non supportano la notifica delle modifiche vengono forniti eventi che consentono di generare tali notifiche. Nell'elenco seguente sono indicate le funzioni supportate dal componente BindingSource:

Riferimento indiretto

Il componente BindingSource fornisce un livello di riferimento indiretto tra un controllo e un'origine dati. Anziché associare un controllo direttamente a un'origine dati, lo si associa a un componente BindingSource e si collega l'origine dati alla proprietà DataSource del componente BindingSource.

Tale livello di riferimento indiretto consente di cambiare l'origine dati senza reimpostare l'associazione del controllo. Ciò rende possibili le operazioni seguenti:

Gestione della diffusione dei dati

Il componente BindingSource implementa l'interfaccia ICurrencyManagerProvider per la gestione automatica della diffusione dei dati. Utilizzando l'interfaccia ICurrencyManagerProvider è inoltre possibile accedere all'oggetto CurrencyManager relativo a un oggetto BindingSource e a un altro oggetto BindingSource associato allo stesso DataMember.

Il componente BindingSource incapsula funzionalità di CurrencyManager ed espone proprietà ed eventi più comuni di CurrencyManager. Nella tabella seguente sono descritti alcuni membri correlati alla gestione della diffusione dei dati.

  • Proprietà CurrencyManager
    Ottiene l'oggetto CurrencyManager associato al BindingSource.

  • Metodo GetRelatedCurrencyManager
    Se esiste un altro BindingSource associato al membro dati specificato, ne ottiene l'oggetto CurrencyManager.

  • Proprietà Current
    Ottiene l'elemento corrente dell'origine dati.

  • Proprietà Position
    Ottiene o imposta la posizione corrente nell'elenco sottostante.

  • Metodo EndEdit
    Applica modifiche in sospeso all'origine dati sottostante.

  • Metodo CancelEdit
    Annulla l'operazione di modifica corrente.

Origine dati sotto forma di elenco

Il componente BindingSource implementa le interfacce IBindingListView e ITypedList. Ciò consente di utilizzare il componente BindingSource stesso come origine dati, senza archivio esterno.

Quando il componente BindingSource è collegato a un'origine dati, espone l'origine dati sotto forma di elenco.

La proprietà DataSource può essere impostata su diverse origini dati, tra cui tipi, oggetti ed elenchi di tipi. L'origine dati risultante verrà esposta sotto forma di elenco. Nella tabella seguente sono indicate alcune origini dati comuni e l'elenco che risulta dalla valutazione.

Proprietà DataSource

Risultati dell'elenco

Riferimento null (Nothing in Visual Basic)

Un'interfaccia IBindingList vuota di oggetti. Con l'aggiunta di un elemento l'elenco viene impostato sul tipo dell'elemento aggiunto.

Riferimento null (Nothing in Visual Basic) con la proprietà DataMember impostata

Non supportato. Genera ArgumentException.

Tipo non di elenco o oggetto di tipo "T"

Un'interfaccia IBindingList vuota del tipo "T".

Istanza di matrice

Un'interfaccia IBindingList contenente gli elementi della matrice.

Istanza dell'interfaccia IEnumerable

Un'interfaccia IBindingList contenente gli elementi di IEnumerable.

Istanza di elenco contenente il tipo "T"

Un'istanza di IBindingList contenente il tipo "T".

Inoltre, la proprietà DataSource può essere impostata su altri tipi di elenco, ad esempio IListSource e ITypedList, e l'oggetto BindingSource li gestirà in modo appropriato. In questo caso, è necessario che il tipo contenuto nell'elenco disponga di un costruttore predefinito.

BindingSource sotto forma di un'interfaccia IBindingList

Il componente BindingSource fornisce membri per l'accesso e la modifica dei dati sottostanti sotto forma di un'interfaccia IBindingList. Nella tabella seguente sono descritti alcuni di tali membri.

Membro

Descrizione

Proprietà List

Ottiene l'elenco che risulta dalla valutazione della proprietà DataSource o DataMember.

Metodo AddNew

Aggiunge un nuovo elemento all'elenco sottostante. Viene applicato a origini dati che implementano l'interfaccia IBindingList e consentono l'aggiunta di elementi, vale a dire quando la proprietà AllowNew è impostata su true.

Creazione elementi personalizzata

È possibile gestire l'evento AddingNew per fornire una logica di creazione elementi personalizzata. L'evento AddingNew si verifica prima che un nuovo oggetto venga aggiunto al BindingSource. Viene generato dopo la chiamata del metodo AddNew ma prima che il nuovo elemento venga aggiunto all'elenco sottostante. La gestione dell'evento consente di fornire un comportamento di creazione elementi personalizzato senza derivazione dalla classe BindingSource. Per ulteriori informazioni, vedere Procedura: personalizzare l'aggiunta di elementi con BindingSource Windows Form.

Creazione elementi transazionale

Il componente BindingSource implementa l'interfaccia ICancelAddNew, che consente la creazione di elementi transazionale. Dopo la creazione temporanea di un nuovo elemento mediante una chiamata al metodo AddNew, è possibile eseguire il commit o il rollback dell'aggiunta nei modi seguenti:

  • Con il metodo EndNew il commit dell'aggiunta in sospeso viene eseguito in modo esplicito.

  • Con l'esecuzione di un'altra operazione sugli insiemi, ad esempio un inserimento, una rimozione o uno spostamento, il commit dell'aggiunta in sospeso viene eseguito in modo implicito.

  • Con il metodo CancelNew viene eseguito il rollback dell'aggiunta in sospeso se il commit non è stato ancora eseguito.

Supporto di IEnumerable

Il componente BindingSource consente l'associazione di controlli a origini dati IEnumerable. Con tale componente è possibile eseguire un'associazione a un'origine dati come una classe System.Data.SqlClient.SqlDataReader.

Quando un'origine dati IEnumerable è assegnata al componente BindingSource, il BindingSource crea un'interfaccia IBindingList e aggiunge il contenuto dell'origine dati IEnumerable all'elenco.

Supporto della fase di progettazione

Alcuni tipi di oggetto non possono essere creati in fase di progettazione, ad esempio gli oggetti creati da una class factory o quelli restituiti da un servizio Web. Talvolta può essere necessario associare controlli a questi tipi in fase di progettazione, anche se non esiste alcun oggetto in memoria a cui associare i controlli. Potrebbe, ad esempio, essere necessario etichettare le intestazioni di colonna di un controllo DataGridView con i nomi delle proprietà pubbliche del tipo personalizzato.

Per tale scenario il componente BindingSource supporta l'associazione a una classe Type. Quando si assegna una classe Type alla proprietà DataSource, il componente BindingSource crea una classe BindingList<T> vuota di elementi Type. Agli eventuali controlli associati successivamente al componente BindingSource verrà comunicata la presenza delle proprietà o dello schema del tipo in fase di progettazione o di esecuzione. Per ulteriori informazioni, vedere Procedura: associare un controllo Windows Form a un tipo.

Metodi ListBindingHelper static

I tipi System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManager e BindingSource condividono tutti una logica comune per generare un elenco da una coppia DataSource/DataMember. Questa logica comune, inoltre, viene esposta pubblicamente per essere utilizzata dagli autori di controlli e da altri utenti nei seguenti metodi static:

Ordinamento e filtro con l'interfaccia IBindingListView

Il componente BindingSource implementa l'interfaccia IBindingListView, che estende l'interfaccia IBindingList. L'interfaccia IBindingList consente l'ordinamento di singole colonne mentre IBindingListView offre funzioni di filtro e ordinamento avanzato. Con IBindingListView è possibile ordinare e filtrare gli elementi nell'origine dati, a condizione che anche in quest'ultima sia implementata una di queste interfacce. Il componente BindingSource non fornisce un'implementazione di riferimento di tali membri. Le chiamate, al contrario, vengono inoltrate all'elenco sottostante.

Nella tabella seguente vengono descritte le proprietà utilizzate per l'ordinamento e il filtro.

Membro

Descrizione

Proprietà Filter

Se l'origine dati è un'interfaccia IBindingListView, ottiene o imposta l'espressione utilizzata per filtrare le righe visualizzate.

Proprietà Sort

Se l'origine dati è un'interfaccia IBindingList, ottiene o imposta un nome di colonna utilizzato per l'ordinamento e il criterio di ordinamento.

-oppure-

Se l'origine dati è un'interfaccia IBindingListView e supporta l'ordinamento avanzato, ottiene più nomi di colonna utilizzati per l'ordinamento e il criterio di ordinamento.

Integrazione con BindingNavigator

È possibile utilizzare il componente BindingSource per associare qualsiasi controllo Windows Form a un'origine dati ma il controllo BindingNavigator è progettato in modo specifico per l'utilizzo con il componente BindingSource. Il controllo BindingNavigator fornisce un'interfaccia utente per il controllo dell'elemento corrente del componente BindingSource. Per impostazione predefinita il controllo BindingNavigator fornisce pulsanti che corrispondono ai metodi di spostamento esistenti nel componente BindingSource. Per ulteriori informazioni, vedere Procedura: esplorare i dati con il controllo BindingNavigator Windows Form.

Vedere anche

Attività

Procedura: associare un controllo Windows Form a un tipo

Procedura: riflettere gli aggiornamenti dell'origine dati in un controllo Windows Form con BindingSource

Riferimenti

Cenni preliminari sul componente BindingSource

BindingSource

BindingNavigator

Altre risorse

Controllo BindingNavigator (Windows Form)

Associazione ai dati di Windows Form

Controlli da utilizzare in Windows Form