Architettura del componente BindingSource

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

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

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

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

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

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

  • Fornisce un livello di riferimento indiretto 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 di Windows Form correlati ai dati, in particolare i BindingNavigator controlli e DataGridView .

Per questi motivi, il BindingSource componente è il modo migliore per associare i controlli Windows Form alle origini dati.

Funzionalità BindingSource

Il componente fornisce diverse funzionalità per l'associazione BindingSource dei controlli ai dati. Con queste funzionalità, è possibile implementare la maggior parte degli scenari di data binding senza scrivere codice nella propria parte.

Il BindingSource componente 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 l'associazione a qualsiasi tipo. Ad esempio, è possibile associare la DataSource proprietà a un DataSet oggetto 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 BindingSource componente semplifica notevolmente il processo di associazione dei dati ai controlli. Per i tipi di origine dati che forniscono la notifica delle modifiche, il BindingSource componente 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 BindingSource componente:

Riferimento indiretto

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

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 BindingSource componente implementa l'interfaccia ICurrencyManagerProvider per gestire automaticamente la gestione della valuta. Con l'interfaccia ICurrencyManagerProvider è anche possibile accedere al gestore di valuta per un BindingSourceoggetto , oltre al gestore di valuta per un altro BindingSource associato allo stesso DataMemberoggetto .

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

Proprietà CurrencyManager
Ottiene il gestore di valuta associato all'oggetto BindingSource.

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

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

Proprietà Position
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 BindingSource componente implementa le IBindingListView interfacce e ITypedList . Con questa implementazione, è possibile usare il BindingSource componente stesso come origine dati, senza alcuna risorsa di archiviazione esterna.

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

La DataSource proprietà può essere impostata su diverse origini dati. Sono inclusi tipi, oggetti ed elenchi di tipi. L'origine dati risultante verrà esposta come elenco. La tabella seguente illustra alcune delle origini dati comuni e la valutazione dell'elenco risultante.

Proprietà DataSource Elencare i risultati
Riferimento null (Nothing in Visual Basic) IBindingList Vuoto di oggetti. L'aggiunta di un elemento imposta l'elenco al tipo dell'elemento aggiunto.
Riferimento Null (Nothing in Visual Basic) con DataMember set Non supportato; genera ArgumentException.
Tipo o oggetto non elenco di tipo "T" Vuoto IBindingList di tipo "T".
Istanza di matrice Oggetto IBindingList contenente gli elementi della matrice.
IEnumerable Istanza Oggetto IBindingList contenente gli IEnumerable elementi
Elenco dell'istanza contenente il tipo "T" IBindingList Istanza contenente il tipo "T".

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

BindingSource come IBindingList

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

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

Creazione di elementi personalizzati

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

Creazione di elementi transazionali

Il BindingSource componente 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'addizione nei modi seguenti:

  • Il EndNew metodo eseguirà il commit esplicito dell'aggiunta in sospeso.

  • L'esecuzione di un'altra operazione di raccolta, ad esempio inserimento, rimozione o spostamento, eseguirà in modo implicito il commit dell'aggiunta in sospeso.

  • Il CancelNew metodo eseguirà il rollback dell'aggiunta in sospeso se il metodo non è già stato eseguito il commit.

Supporto di IEnumerable

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

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

Supporto in fase di progettazione

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 DataGridView controllo con i nomi delle proprietà pubbliche del tipo personalizzato.

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

Metodi statici listBindingHelper

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

Ordinamento e filtro con l'interfaccia IBindingListView

Il BindingSource componente implementa l'interfaccia IBindingListView , che estende l'interfaccia IBindingList . Offre l'ordinamento IBindingList a colonna singola e offre l'ordinamento e il IBindingListView filtro avanzati. Con IBindingListViewè possibile ordinare e filtrare gli elementi nell'origine dati, se l'origine dati implementa anche una di queste interfacce. Il BindingSource componente 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
Proprietà Filter Se l'origine dati è un IBindingListView, ottiene o imposta l'espressione usata per filtrare le righe da visualizzare.
Proprietà Sort Se l'origine dati è un IBindingList, ottiene o imposta un nome di colonna usato per l'ordinamento e il criterio di ordinamento.

-oppure-

Se l'origine dati è un IBindingListView oggetto e supporta l'ordinamento avanzato, ottiene più nomi di colonna usati per l'ordinamento e l'ordinamento

Integrazione con BindingNavigator

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

Vedi anche