Condividi tramite


Architettura del componente BindingSource

Con il componente BindingSource è possibile associare universalmente tutti i controlli Windows Form alle origini dati.

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

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

  • Incapsula le funzionalità di CurrencyManager ed espone gli eventi di CurrencyManager durante la fase di progettazione.

  • Semplifica la creazione di un elenco che supporta l'interfaccia IBindingList fornendo una notifica di modifica dell'elenco per le origini dati che non supportano in modo nativo la notifica delle modifiche all'elenco.

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

  • Fornisce un livello di indirezione tra l'origine dati e il controllo. Questo riferimento indiretto è importante quando l'origine dati può cambiare in fase di esecuzione.

  • Interagisce con altri controlli Windows Form correlati ai dati, in particolare il BindingNavigator e i controlli DataGridView.

Per questi motivi, il componente BindingSource è il modo preferito 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. Con queste funzionalità, è possibile implementare la maggior parte degli scenari di associazione dati quasi senza scrivere codice da parte tua.

Il componente BindingSource esegue questa operazione fornendo un'interfaccia coerente per l'accesso a molti tipi diversi di origini dati. Ciò significa che si usa la stessa procedura per il collegamento a qualsiasi tipo. Ad esempio, è possibile associare la proprietà DataSource a un DataSet o a un oggetto business e in entrambi i casi si usa lo stesso set di proprietà, metodi ed eventi per modificare l'origine dati.

L'interfaccia coerente fornita dal componente BindingSource semplifica notevolmente il processo di associazione dei dati ai controlli. Per i tipi di origine dati che forniscono una notifica di modifica, il componente BindingSource comunica automaticamente le modifiche tra il controllo e l'origine dati. Per i tipi di origine dati che non forniscono la notifica delle modifiche, vengono forniti eventi che consentono di generare notifiche di modifica. L'elenco seguente mostra le funzionalità supportate dal componente BindingSource:

Riferimento indiretto

Il componente BindingSource fornisce un livello di indirezione tra un controllo e un'origine dati. Anziché collegare un controllo direttamente a un'origine dati, collegare il controllo a un BindingSourcee collegare l'origine dati alla proprietà DataSource del componente BindingSource.

Con questo livello di riferimento indiretto, è possibile modificare l'origine dati senza reimpostare l'associazione di controllo. In questo modo sono disponibili le funzionalità seguenti:

Gestione valuta

Il componente BindingSource implementa l'interfaccia ICurrencyManagerProvider per gestire automaticamente la gestione delle valute. Con l'interfaccia ICurrencyManagerProvider, puoi accedere anche al gestore valuta per un BindingSource, oltre a quello per un altro BindingSource associato allo stesso DataMember.

Il componente BindingSource incapsula le funzionalità di CurrencyManager ed espone le proprietà e gli eventi più comuni di CurrencyManager. Nella tabella seguente vengono descritti alcuni membri correlati alla gestione della valuta.

CurrencyManager proprietà
Ottiene il gestore di valuta associato al BindingSource.

Metodo GetRelatedCurrencyManager
Se è presente un altro BindingSource associato al membro dati specificato, ottiene il relativo gestore valuta.

Current proprietà
Ottiene l'elemento corrente dell'origine dati.

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

metodo EndEdit
Applica le modifiche in sospeso all'origine dati sottostante.

metodo CancelEdit
Annulla l'operazione di modifica corrente.

Origine dati come elenco

Il componente BindingSource implementa le interfacce IBindingListView e ITypedList. Con questa implementazione, è possibile usare il componente BindingSource stesso come origine dati, senza alcuna risorsa di archiviazione esterna.

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

La proprietà DataSource può essere impostata su diverse origini dati. Sono inclusi tipi, oggetti ed elenchi di tipi. L'origine dati risultante sarà visualizzata come elenco. Nella tabella seguente sono illustrate alcune delle fonti di dati comuni e la valutazione della lista risultante.

Proprietà DataSource Elencare i risultati
Un riferimento nullo (Nothing in Visual Basic) Lista vuota di oggetti IBindingList. L'aggiunta di un elemento imposta l'elenco al tipo dell'elemento aggiunto.
Referenza nulla (Nothing in Visual Basic) con DataMember impostato Non supportato; genera ArgumentException.
Tipo non elenco o oggetto di tipo "T" Un IBindingList vuoto di tipo "T".
Istanza di matrice Oggetto IBindingList contenente gli elementi dell'array.
Istanza di IEnumerable Un IBindingList contenente gli elementi di IEnumerable
Elenco dell'istanza contenente il tipo "T" Istanza di IBindingList contenente il tipo "T".

Inoltre, DataSource può essere impostato su altri tipi di elenco, ad esempio IListSource e ITypedListe l'BindingSource li gestirà in modo appropriato. In questo caso, il tipo contenuto nell'elenco deve avere un costruttore senza parametri.

BindingSource come IBindingList

Il componente BindingSource fornisce membri per accedere e modificare i dati sottostanti come IBindingList. Nella tabella seguente vengono descritti alcuni di questi membri.

Membro Descrizione
List proprietà Ottiene l'elenco risultante dalla valutazione delle proprietà DataSource o DataMember.
metodo AddNew Aggiunge un nuovo elemento all'elenco sottostante. Si applica alle origini dati che implementano l'interfaccia IBindingList e consentono l'aggiunta di elementi, ovvero la proprietà AllowNew è impostata su true.

Creazione di elementi personalizzati

È possibile gestire l'evento AddingNew per fornire la logica di creazione personalizzata degli elementi. L'evento AddingNew si verifica prima dell'aggiunta di un nuovo oggetto al BindingSource. Questo evento viene generato dopo la chiamata al metodo AddNew, ma prima dell'aggiunta del nuovo elemento all'elenco sottostante. Gestendo questo evento, è possibile fornire un comportamento di creazione dell'elemento personalizzato senza derivare dalla classe BindingSource. Per ulteriori informazioni, vedere Procedura: Personalizzare l'aggiunta di elementi con BindingSource di Windows Forms.

Creazione di elementi transazionali

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

  • Il metodo EndNew effettuerà un commit esplicito dell'aggiunta in sospeso.

  • L'esecuzione di un'altra operazione sulla collezione, come l'inserimento, la rimozione o lo spostamento, confermerà automaticamente l'aggiunta in sospeso.

  • Il metodo CancelNew eseguirà il rollback dell'aggiunta in sospeso se non è già stata confermata.

Supporto IEnumerable

Il componente BindingSource consente l'associazione dei controlli alle origini dati IEnumerable. Con questo componente, è possibile associarsi a un'origine dati, ad esempio un System.Data.SqlClient.SqlDataReader.

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

supporto Design-Time

Alcuni tipi di oggetto non possono essere creati in fase di progettazione, ad esempio oggetti creati da una classe factory o oggetti restituiti da un servizio Web. A volte potrebbe essere necessario associare i controlli a questi tipi in fase di progettazione, anche se in memoria non è presente alcun oggetto a cui i controlli possono essere associati. Ad esempio, è necessario etichettare le intestazioni di colonna di un controllo DataGridView con i nomi delle proprietà pubbliche del tipo personalizzato.

Per supportare questo scenario, il componente BindingSource supporta l'associazione a un Type. Quando si assegna una Type alla proprietà DataSource, il componente BindingSource crea un BindingList<T> vuoto di elementi Type. Tutti i controlli che successivamente associ al componente BindingSource saranno notificati della presenza delle proprietà o dello schema del vostro tipo sia in fase di progettazione che in fase di esecuzione. Per altre informazioni, vedere Procedura: Associare un controllo Windows Form a un tipo.

Metodi statici ListBindingHelper

I tipi System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManagere BindingSource condividono tutti la logica comune per generare un elenco da una coppia di DataSource/DataMember. Inoltre, questa logica comune viene esposta pubblicamente per l'uso da parte degli autori di controlli e di altre terze parti nei metodi static seguenti:

Ordinamento e filtro con l'interfaccia IBindingListView

Il componente BindingSource implementa l'interfaccia IBindingListView, che estende l'interfaccia IBindingList. Il IBindingList offre l'ordinamento a colonna singola e il IBindingListView offre l'ordinamento e il filtro avanzati. Con IBindingListViewè possibile ordinare e filtrare gli elementi nell'origine dati, se l'origine dati implementa anche una di queste interfacce. Il componente BindingSource non fornisce un'implementazione di riferimento di questi membri. Le chiamate vengono invece inoltrate all'elenco sottostante.

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

Membro Descrizione
Filter proprietà Se l'origine dati è un IBindingListView, ottiene o imposta l'espressione usata per filtrare le righe visualizzate.
Sort proprietà Se l'origine dati è un IBindingList, ottiene o imposta un nome di colonna utilizzato per l'ordinamento e l'ordinamento delle informazioni.

-o-

Se l'origine dati è un IBindingListView e supporta l'ordinamento avanzato, ottiene i nomi di più colonne usate per l'ordinamento e l'ordine 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 specificamente per funzionare con il componente BindingSource. Il controllo BindingNavigator fornisce un'interfaccia utente per controllare l'elemento corrente del componente BindingSource. Per impostazione predefinita, il controllo BindingNavigator fornisce pulsanti che corrispondono ai metodi di spostamento nel componente BindingSource. Per altre informazioni, vedere Procedura: Esplorare i dati con il controllo BindingNavigator di Windows Forms.

Vedere anche