Condividi tramite


Procedura: aggiungere la convalida a un dataset a più livelli

Aggiornamento: novembre 2007

L'aggiunta della convalida in un dataset separato in una soluzione a più livelli è fondamentalmente uguale all'aggiunta della convalida in un dataset costituito da un singolo file, ovvero un dataset in un solo progetto. È consigliabile eseguire la convalida dei dati durante gli eventi ColumnChanging e/o RowChanging di una tabella dati.

Progettazione DataSet fornisce la funzionalità per creare le classi parziali alle quali è possibile aggiungere il codice utente per gli eventi di modifica colonne e righe delle tabelle dati del dataset. Per ulteriori informazioni sull'aggiunta di codice in un dataset in una soluzione a più livelli, vedere Procedura: aggiungere il codice nei dataset di applicazioni a più livelli e Procedura: aggiungere il codice nei TableAdapter di applicazioni a più livelli. Per ulteriori informazioni sulle classi parziali, vedere Procedura: suddividere una classe in classi parziali o Classi e metodi parziali (Guida per programmatori C#).

Nota:

Quando si separano i dataset dai TableAdapter impostando la proprietà Progetto DataSet, le classi del dataset parziale presenti nel progetto non verranno spostate automaticamente. Le classi parziali del dataset devono essere spostate manualmente nel progetto di dataset.

Nota:

Progettazione DataSet non crea automaticamente i gestori eventi in C# per gli eventi ColumnChanging e RowChanging. È necessario creare manualmente un gestore eventi e associarlo all'evento sottostante. Le procedure descritte di seguito forniscono i passaggi per creare i gestori eventi necessari in Visual Basic e C#.

Convalida delle modifiche a singole colonne

Convalidare i valori nelle singole colonne gestendo l'evento ColumnChanging. L'evento ColumnChanging viene generato quando si modifica il valore in una colonna. Creare un gestore eventi per l'evento ColumnChanging facendo doppio clic sulla colonna desiderata in Progettazione DataSet.

La prima volta che si fa doppio clic su una colonna, la finestra di progettazione genera un gestore eventi per l'evento ColumnChanging. Oltre all'evento ColumnChanging, viene creata anche un'istruzione If…Then per verificare la colonna specifica. Ad esempio, il codice seguente viene generato quando si fa doppio clic sulla colonna RequiredDate della tabella Orders di Northwind:

Private Sub OrdersDataTable_ColumnChanging(ByVal sender As System.Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles Me.ColumnChanging
    If (e.Column.ColumnName = Me.RequiredDateColumn.ColumnName) Then
        ' Add validation code here.
    End If
End Sub
Nota:

Nei progetti in C#, Progettazione DataSet consente di creare solo classi parziali per il dataset e singole tabelle all'interno del dataset. Progettazione DataSet non crea automaticamente i gestori eventi per gli eventi ColumnChanging e RowChanging in C# come per i progetti in Visual Basic. Nei progetti in C#, è necessario costruire manualmente un metodo per gestire l'evento e associare il metodo all'evento sottostante. La procedura descritta di seguito fornisce i passaggi per creare i gestori eventi necessari in Visual Basic e C#.

Nota:

Nel computer in uso è possibile che vengano visualizzati nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per ulteriori informazioni vedere Impostazioni di Visual Studio.

Per aggiungere la convalida durante le modifiche ai valori di una singola colonna

  1. Aprire il dataset in Progettazione DataSet facendo doppio clic sul file con estensione xsd in Esplora soluzioni. Per ulteriori informazioni, vedere Procedura: aprire un dataset in Progettazione DataSet.

  2. Fare doppio clic sulla colonna da convalidare. Attraverso questa azione viene creato il gestore eventi ColumnChanging.

    Nota:

    Progettazione DataSet non crea automaticamente un gestore eventi per l'evento C#. Il codice necessario per gestire l'evento in C# è incluso di seguito. SampleColumnChangingEvent viene creato e quindi associato all'evento ColumnChanging nel metodo EndInit.

  3. Aggiungere codice per verificare che e.ProposedValue contenga dati che soddisfano i requisiti dell'applicazione. Se il valore proposto non è accettabile, impostare la colonna in modo da indicare che contiene un errore.

    Nell'esempio di codice seguente viene eseguita la convalida per verificare che il valore della colonna Quantity sia maggiore di 0. Se il valore di Quantity è minore o uguale a 0, la colonna viene impostata su un errore. La clausola Else cancella l'errore se il valore è maggiore di 0. Il codice nel gestore eventi di modifica colonne deve essere analogo al seguente:

    If (e.Column.ColumnName = Me.QuantityColumn.ColumnName) Then
        If CType(e.ProposedValue, Short) <= 0 Then
            e.Row.SetColumnError(e.Column, "Quantity must be greater than 0")
        Else
            e.Row.SetColumnError(e.Column, "")
        End If
    End If
    
    // C#
    // Add this code to the DataTable 
    // partial class.
    
        public override void EndInit()
        {
            base.EndInit();
            // Hook up the ColumnChanging event
            // to call the SampleColumnChangingEvent method.
            ColumnChanging += SampleColumnChangingEvent;
        }
    
        public void SampleColumnChangingEvent(object sender, System.Data.DataColumnChangeEventArgs e)
        {
            if (e.Column.ColumnName == QuantityColumn.ColumnName)
            {
                if ((short)e.ProposedValue <= 0)
                {
                    e.Row.SetColumnError("Quantity", "Quantity must be greater than 0");
                }
                else
                {
                    e.Row.SetColumnError("Quantity", "");
                }
            }
        }
    

Convalida delle modifiche a intere righe

Convalidare i valori in intere righe gestendo l'evento RowChanging. L'evento RowChanging viene generato quando vengono applicati i valori in tutte le colonne. È necessario eseguire la convalida nell'evento RowChanging quando il valore di una colonna si basa sul valore di un'altra colonna. Si considerino ad esempio OrderDate e RequiredDate nella tabella Orders di Northwind. Quando vengono immessi gli ordini, la convalida verifica che un ordine non venga immesso con un valore RequiredDate uguale o precedente al valore OrderDate. In questo esempio, devono essere confrontati i valori di entrambe le colonne RequiredDate e OrderDate, per cui non ha senso eseguire la convalida della modifica apportata in una singola colonna.

Creare un gestore eventi per l'evento RowChanging facendo doppio clic sul nome della tabella nella barra del titolo della tabella in Progettazione DataSet.

Per aggiungere la convalida durante le modifiche a intere righe

  1. Aprire il dataset in Progettazione DataSet facendo doppio clic sul file con estensione xsd in Esplora soluzioni. Per ulteriori informazioni, vedere Procedura: aprire un dataset in Progettazione DataSet.

  2. Fare doppio clic sulla barra del titolo della tabella dati nella finestra di progettazione.

    Viene creata una classe parziale con un gestore eventi RowChanging e visualizzata nell'editor del codice.

    Nota:

    Progettazione DataSet non crea automaticamente un gestore eventi per l'evento RowChanging nei progetti C#. È necessario creare un metodo per gestire l'evento RowChanging ed eseguire il codice per associare tale evento nel metodo di inizializzazione della tabella.

  3. Aggiungere il codice utente nella dichiarazione di classe parziale.

  4. Nel codice seguente viene illustrato dove aggiungere il codice utente per eseguire la convalida durante l'evento RowChanging per Visual Basic:

    Partial Class OrdersDataTable
        Private Sub OrdersDataTable_OrdersRowChanging(ByVal sender As System.Object, ByVal e As OrdersRowChangeEvent) Handles Me.OrdersRowChanging
            ' Add logic to validate columns here.
            If e.Row.RequiredDate <= e.Row.OrderDate Then
                ' Set the RowError if validation fails.
                e.Row.RowError = "Required Date cannot be on or before the OrderDate"
            Else
                ' Clear the RowError when validation passes.
                e.Row.RowError = ""
            End If
        End Sub
    End Class
    
  5. Nel codice seguente viene illustrato come creare il gestore eventi RowChanging e dove aggiungere il codice utente per eseguire la convalida durante l'evento RowChanging per C#:

    partial class OrdersDataTable
    {
        public override void EndInit()
        {
            base.EndInit();
            // Hook up the event to the
            // RowChangingEvent method.
            OrdersRowChanging += RowChangingEvent;
        }
    
        public void RowChangingEvent(object sender, OrdersRowChangeEvent e)
        {
            // Perfom the validation logic.
            if (e.Row.RequiredDate <= e.Row.OrderDate)
            {
                // Set the row to an error when validation fails.
                e.Row.RowError = "Required Date cannot be on or before the OrderDate";
            }
            else
            {
                // Clear the RowError if validation passes.
                e.Row.RowError = "";
            }
        }
    }
    

Vedere anche

Attività

Procedura dettagliata: creazione di un'applicazione dati a più livelli

Concetti

Novità relative ai dati

Creazione di applicazioni dati con Visual Studio

Cenni preliminari sull'applicazione dati a più livelli

Cenni preliminari sulla convalida dei dati