Interfacce correlate al data binding

Con ADO.NET, è possibile creare molte strutture di dati diverse in base alle esigenze di associazione dell'applicazione e ai dati in uso. Si consiglia di creare classi che forniscono o usano dati in Windows Forms. Questi oggetti possono offrire diversi livelli di funzionalità e complessità, dal data binding, all'offerta di supporto in fase di progettazione, al controllo degli errori, alla notifica delle modifiche o anche al supporto per un annullamento strutturato delle modifiche apportate ai dati.

Consumer delle interfacce di data binding

Le sezioni seguenti descrivono due gruppi di oggetti interfaccia. Nel primo gruppo sono elencate le interfacce implementate nell'origine dati dagli autori dell'origine dati. Queste interfacce sono progettate per essere usate dai consumer dell'origine dati, che sono nella maggior parte dei casi dei controlli o componenti di Windows Forms. Nel secondo gruppo sono elencate le interfacce destinate ad essere usate dagli autori di componenti. Gli autori di componenti usano queste interfacce al momento della creazione di un componente che supporta l'uso del data binding da parte del motore del data-binding di Windows Forms. È possibile implementare queste interfacce all'interno delle classi associate al modulo per consentire il data-binding; ogni caso presenta una classe che implementa un'interfaccia che abilita l'interazione con i dati. Gli strumenti di progettazione rapida delle applicazioni (RAD) di Visual Studio sfruttano già questa funzionalità.

Interfacce per l'implementazione da parte degli autori dell'origine dati

Le interfacce seguenti sono progettate per essere usate dai controlli di Windows Forms:

  • IList Interfaccia

    Una classe che implementa l'interfaccia IList può essere un Arrayoggetto , ArrayListo CollectionBase. Questi sono elenchi indicizzati di elementi di tipo Object. Questi elenchi devono contenere tipi omogenei, perché il primo elemento dell'indice determina il tipo. IList sarebbe disponibile per l'associazione solo in fase di esecuzione.

    Nota

    Se si desidera creare un elenco di oggetti business per l'associazione con Windows Form, è consigliabile usare .BindingList<T> BindingList<T> è una classe estendibile che implementa le interfacce primarie necessarie per il data binding bidirezionale Windows Form.

  • IBindingList Interfaccia

    Una classe che implementa l'interfaccia IBindingList fornisce un livello molto superiore di funzionalità di data binding. Questa implementazione offre funzionalità di ordinamento di base e la notifica delle modifiche, sia quando gli elementi dell'elenco cambiano (ad esempio, il terzo elemento in un elenco di clienti include una modifica al campo indirizzo), sia quando l'elenco stesso cambia (ad esempio, il numero di elementi nell'elenco aumenta o diminuisce). La notifica della modifica è importante se si prevede di disporre di più controlli associati agli stessi dati e si desidera che le modifiche apportate in uno dei controlli si propaghi agli altri controlli associati.

    Nota

    La notifica delle modifiche è abilitata per l'interfaccia IBindingList tramite la SupportsChangeNotification proprietà che, quando true, genera un ListChanged evento, che indica che l'elenco è stato modificato o un elemento nell'elenco è stato modificato.

    Il tipo di modifica viene descritto dalla ListChangedType proprietà del ListChangedEventArgs parametro . Di conseguenza, ogni volta che viene aggiornato il modello di dati, anche tutte le visualizzazioni dipendenti, ad esempio gli altri controlli associati alla stessa origine dati, verranno aggiornate. Tuttavia, gli oggetti contenuti nell'elenco dovranno notificare all'elenco quando cambiano in modo che l'elenco possa generare l'evento ListChanged .

    Nota

    BindingList<T> fornisce un'implementazione generica dell'interfaccia IBindingList .

  • IBindingListView Interfaccia

    Una classe che implementa l'interfaccia IBindingListView fornisce tutte le funzionalità di un'implementazione di IBindingList, nonché il filtro e la funzionalità di ordinamento avanzata. Questa implementazione fornisce un filtro basato sulle stringhe, e un ordinamento a più colonne con coppie descrittore-direzione della proprietà.

  • IEditableObject Interfaccia

    Una classe che implementa l'interfaccia IEditableObject consente a un oggetto di controllare quando le modifiche apportate a tale oggetto vengono rese permanenti. Questa implementazione offre i BeginEditmetodi , EndEdite CancelEdit che consentono di eseguire il rollback delle modifiche apportate all'oggetto . Di seguito è riportata una breve spiegazione del funzionamento dei BeginEditmetodi , EndEdite CancelEdit e di come funzionano tra loro per consentire un possibile rollback delle modifiche apportate ai dati:

    • Il BeginEdit metodo segnala l'inizio di una modifica in un oggetto . Un oggetto che implementa questa interfaccia dovrà archiviare gli aggiornamenti dopo la chiamata al BeginEdit metodo in modo che gli aggiornamenti possano essere eliminati se viene chiamato il CancelEdit metodo . Nel data binding Windows Form è possibile chiamare BeginEdit più volte nell'ambito di una singola transazione di modifica ( ad esempio , BeginEditBeginEdit, EndEdit). Le implementazioni di IEditableObject devono tenere traccia del fatto che BeginEdit sia già stato chiamato e ignorare le chiamate successive a BeginEdit. Poiché questo metodo può essere chiamato più volte, è importante che le chiamate successive a esso non siano distruttive; ovvero, le chiamate successive BeginEdit non possono eliminare definitivamente gli aggiornamenti che sono stati eseguiti o modificare i dati salvati nella prima BeginEdit chiamata.

    • Il metodo esegue il EndEdit push delle modifiche apportate da quando BeginEdit è stato chiamato nell'oggetto sottostante, se l'oggetto è attualmente in modalità di modifica.

    • Il CancelEdit metodo elimina tutte le modifiche apportate all'oggetto .

    Per altre informazioni sul funzionamento dei BeginEditmetodi , EndEdite CancelEdit , vedere Salvare i dati nel database.

    Questa nozione transazionale di funzionalità dei dati viene usata dal DataGridView controllo .

  • ICancelAddNew Interfaccia

    Una classe che implementa l'interfaccia ICancelAddNew implementa in genere l'interfaccia IBindingList e consente di eseguire il rollback di un'aggiunta apportata all'origine dati con il AddNew metodo . Se l'origine dati implementa l'interfaccia IBindingList , è necessario implementare anche l'interfaccia ICancelAddNew .

  • IDataErrorInfo Interfaccia

    Una classe che implementa l'interfaccia IDataErrorInfo consente agli oggetti di offrire informazioni personalizzate sugli errori ai controlli associati:

    • La Error proprietà restituisce il testo generale del messaggio di errore , ad esempio "Si è verificato un errore".

    • La Item[] proprietà restituisce una stringa con il messaggio di errore specifico della colonna , ad esempio "Il valore nella State colonna non è valido".

  • IEnumerable Interfaccia

    Una classe che implementa l'interfaccia IEnumerable viene in genere utilizzata da ASP.NET. Windows Form supporto per questa interfaccia è disponibile solo tramite il BindingSource componente .

    Nota

    Il BindingSource componente copia tutti gli IEnumerable elementi in un elenco separato a scopo di associazione.

  • ITypedList Interfaccia

    Una classe di raccolte che implementa l'interfaccia ITypedList consente di controllare l'ordine e il set di proprietà esposte al controllo associato.

    Nota

    Quando si implementa il GetItemProperties metodo e la PropertyDescriptor matrice non è Null, l'ultima voce nella matrice sarà il descrittore di proprietà che descrive la proprietà list che è un altro elenco di elementi.

  • ICustomTypeDescriptor Interfaccia

    Una classe che implementa l'interfaccia ICustomTypeDescriptor fornisce informazioni dinamiche su se stessa. Questa interfaccia è simile a ITypedList ma viene usata per gli oggetti anziché per gli elenchi. Questa interfaccia viene usata da DataRowView per proiettare lo schema delle righe sottostanti. Una semplice implementazione di ICustomTypeDescriptor viene fornita dalla CustomTypeDescriptor classe .

    Nota

    Per supportare l'associazione in fase di progettazione ai tipi che implementano ICustomTypeDescriptor, il tipo deve anche implementare IComponent ed esistere come istanza del modulo.

  • IListSource Interfaccia

    Una classe che implementa l'interfaccia abilita l'associazione IListSource basata su elenco su oggetti non elenco. Il GetList metodo di IListSource viene utilizzato per restituire un elenco associabile da un oggetto che non eredita da IList. IListSource viene usato dalla DataSet classe .

  • IRaiseItemChangedEvents Interfaccia

    Una classe che implementa l'interfaccia IRaiseItemChangedEvents è un elenco associabile che implementa anche l'interfaccia IBindingList . Questa interfaccia viene utilizzata per indicare se il tipo genera ListChanged eventi di tipo ItemChanged tramite la relativa RaisesItemChangedEvents proprietà .

    Nota

    È necessario implementare se l'origine IRaiseItemChangedEvents dati fornisce la proprietà per elencare la conversione di eventi descritta in precedenza e interagisce con il BindingSource componente. In caso contrario, verrà eseguita anche la BindingSource proprietà per elencare la conversione degli eventi con prestazioni più lente.

  • ISupportInitialize Interfaccia

    Un componente che implementa l'interfaccia sfrutta i vantaggi delle ottimizzazioni batch per l'impostazione ISupportInitialize delle proprietà e l'inizializzazione delle proprietà co-dipendenti. Contiene ISupportInitialize due metodi:

    • BeginInit segnala che l'inizializzazione dell'oggetto è in fase di avvio.

    • EndInit segnala che l'inizializzazione dell'oggetto sta terminando.

  • ISupportInitializeNotification Interfaccia

    Un componente che implementa l'interfaccia ISupportInitializeNotification implementa anche l'interfaccia ISupportInitialize . Questa interfaccia consente di notificare ad altri ISupportInitialize componenti che l'inizializzazione è stata completata. L'interfaccia ISupportInitializeNotification contiene due membri:

  • INotifyPropertyChanged Interfaccia

    Una classe che implementa questa interfaccia è un tipo che genera un evento quando uno dei valori delle proprietà viene modificato. Questa interfaccia è progettata per sostituire il criterio di disporre di un evento di modifica per ogni proprietà di un controllo. Se usato in , BindingList<T>un oggetto business deve implementare l'interfaccia INotifyPropertyChanged e BindingList'1 convertirà PropertyChanged gli eventi in ListChanged eventi di tipo ItemChanged.

    Nota

    Affinché la notifica di modifica venga eseguita in un'associazione tra un client associato e un'origine dati, il tipo di origine dati associato deve implementare l'interfaccia INotifyPropertyChanged (preferita) oppure è possibile fornire eventi propertyNameChanged per il tipo associato, ma non è consigliabile eseguire entrambe le operazioni.

Interfacce per l'implementazione da parte degli autori del componente

Le interfacce seguenti sono progettate per l'uso da parte del motore di data-binding di Windows Forms:

Vedi anche