Convalida dei dati nei dataset

La convalida dei dati è il processo mediante il quale si conferma che i valori immessi negli oggetti dati sono conformi ai vincoli specificati all'interno di uno schema del dataset, nonché alle regole stabilite per l'applicazione. La convalida dei dati che precede l'invio degli aggiornamenti al database sottostante è un'operazione consigliata in quanto consente di ridurre gli errori nonché il numero potenziale di round trip tra un'applicazione e il database. È possibile confermare la validità dei dati scritti in un dataset compilando controlli di convalida nel dataset stesso. Per il dataset è possibile controllare i dati indipendentemente dal modo in cui viene svolto l'aggiornamento: direttamente dai controlli di un form, all'interno di un componente o in un altro modo. Poiché il dataset fa parte dell'applicazione, è il posto più adatto per compilare una convalida specifica dell'applicazione, anziché compilare gli stessi controlli all'interno del database back-end.

La posizione suggerita per l'aggiunta della convalida nell'applicazione è il file di classe parziale del dataset. In Visual Basic o Visual C# aprire Progettazione DataSet e fare doppio clic sulla colonna o sulla tabella per la quale si desidera creare una convalida. Questa azione comporta la creazione automatica di un gestore eventi ColumnChanging o RowChanging. Per ulteriori informazioni, vedere Procedura: convalidare i dati durante la modifica delle colonne o Procedura: convalidare i dati durante la modifica delle righe. Per un esempio completo, vedere Procedura dettagliata: aggiunta di convalida a un dataset.

Convalida dei dati

La convalida all'interno di un dataset può essere svolta nei seguenti modi:

Quando viene apportata una modifica a un record, l'oggetto DataTable può generare diversi eventi:

Per impostazione predefinita, ogni modifica apportata a una colonna genera pertanto quattro eventi: in primo luogo gli eventi ColumnChanging e ColumnChanged per la specifica colonna modificata, quindi gli eventi RowChanging e RowChanged. Se vengono apportate più modifiche alla riga, per ciascuna modifica verranno generati degli eventi.

Nota

Il metodo BeginEdit della riga di dati disattiva gli eventi RowChanging e RowChanged in seguito a ogni singola modifica di colonna. In tale caso, l'evento non viene generato finché non viene chiamato il metodo EndEdit, quando gli eventi RowChanging e RowChanged vengono generati una sola volta. Per ulteriori informazioni, vedere Procedura: disattivare i vincoli durante il riempimento di un dataset.

L'evento scelto dipende dal livello di dettaglio che si desidera conferire alla convalida. Se è importante intercettare un errore immediatamente dopo la modifica di una colonna, compilare la convalida utilizzando l'evento ColumnChanging. In caso contrario, utilizzare l'evento RowChanging, che potrebbe determinare l'intercettazione di diversi errori contemporaneamente. Inoltre, se i dati sono strutturati in modo che il valore di una colonna viene convalidato in base al contenuto di un'altra, sarà necessario effettuare la convalida durante l'evento RowChanging.

Quando i record vengono aggiornati, l'oggetto DataTable genera gli eventi ai quali è possibile rispondere durante e dopo l'inserimento di modifiche.

Se nell'applicazione è in uso un dataset tipizzato, sarà possibile creare gestori eventi fortemente tipizzati. Ciò comporta l'aggiunta di altri quattro eventi tipizzati per i quali è possibile creare gestori, ovvero dataTableNameRowChanging, dataTableNameRowChanged, dataTableNameRowDeleting e dataTableNameRowDeleted. Questi gestori eventi tipizzati passano un argomento nel quale sono compresi i nomi delle colonne della tabella che facilitano la lettura e la scrittura del codice.

Eventi di aggiornamento dei dati

Evento

Descrizione

ColumnChanging

È in corso la modifica del valore di una colonna. L'evento passa la riga e la colonna insieme al nuovo valore proposto.

ColumnChanged

Il valore di una colonna è stato modificato. L'evento passa la riga e la colonna insieme al valore proposto.

RowChanging

Sta per essere eseguito il commit nel dataset delle modifiche apportate a un oggetto DataRow. Se il metodo BeginEdit non è stato chiamato, viene generato l'evento RowChanging per ogni modifica apportata a una colonna, immediatamente dopo la generazione dell'evento ColumnChanging. Se BeginEdit è stato chiamato prima dell'inserimento di modifiche, l'evento RowChanging viene generato solo quando si chiama il metodo EndEdit.

L'evento passa la riga insieme a un valore che indica il tipo di operazione che sta per essere eseguita, ad esempio modifica, inserimento e così via.

RowChanged

Una riga è stata modificata. L'evento passa la riga insieme a un valore che indica il tipo di operazione che sta per essere eseguita, ad esempio modifica, inserimento e così via.

RowDeleting

È in corso l'eliminazione di una riga. L'evento passa la riga insieme a un valore che indica il tipo di operazione che sta per essere eseguita, in questo caso l'eliminazione.

RowDeleted

Una riga è stata eliminata. L'evento passa la riga insieme a un valore che indica il tipo di operazione che sta per essere eseguita, in questo caso l'eliminazione.

Gli eventi ColumnChanging, RowChanging e RowDeleting vengono generati durante il processo di aggiornamento. È possibile utilizzare questi eventi per convalidare i dati o per svolgere altri tipi di elaborazione. Poiché gli aggiornamenti vengono elaborati durante questi eventi, è possibile annullare l'aggiornamento lanciando un'eccezione, in modo da impedire il completamento della modifica.

Gli eventi ColumnChanged, RowChanged e RowDeleted sono eventi di notifica generati al termine dell'aggiornamento. sono utili quando si desidera svolgere ulteriori azioni basate su un aggiornamento completato con esito positivo.

Vedere anche

Attività

Procedura: connettersi ai dati di un database

Procedura: convalidare dati nel controllo DataGridView di Windows Form

Procedura: visualizzare le icone di errori per la convalida dei form con il componente ErrorProvider di Windows Form

Concetti

Progettazione DataSet