Condividi tramite


Eseguire il commit delle modifiche in corso nei controlli associati ai dati prima di effettuare il salvataggio dei dati

Annotazioni

La DataSet classe e le classi correlate sono tecnologie .NET Framework legacy dei primi anni '2000 che consentono alle applicazioni di lavorare con i dati in memoria mentre le app vengono disconnesse dal database. Le tecnologie sono particolarmente utili per le app che consentono agli utenti di modificare i dati e rendere persistenti le modifiche apportate al database. Sebbene i set di dati siano una tecnologia di successo comprovata, l'approccio consigliato per le nuove applicazioni .NET consiste nell'usare Entity Framework Core. Entity Framework offre un modo più naturale per usare i dati tabulari come modelli a oggetti e dispone di un'interfaccia di programmazione più semplice.

Quando si modificano i valori nei controlli associati a dati, gli utenti devono spostarsi al di fuori del record corrente per eseguire il commit del valore aggiornato nell'origine dati sottostante a cui è associato il controllo. Quando trascini gli elementi dalla finestra Origini dati su un form, il primo elemento che rilasci inserisce il codice nell'evento click del pulsante Salva dell'oggetto BindingNavigator. Questo codice chiama il metodo EndEdit di BindingSource. Pertanto, la chiamata al EndEdit metodo viene generata solo per la prima BindingSource aggiunta al modulo.

La EndEdit chiamata esegue il commit di tutte le modifiche in corso, in tutti i controlli associati a dati attualmente in fase di modifica. Pertanto, se un controllo associato a dei dati ha ancora lo stato attivo e si fa clic sul pulsante Salva , tutte le modifiche in sospeso in tale controllo vengono sottoposte a commit prima del salvataggio effettivo (il metodo TableAdapterManager.UpdateAll ).

È possibile configurare l'applicazione per il commit automatico delle modifiche, anche se un utente tenta di salvare i dati senza eseguire il commit delle modifiche, come parte del processo di salvataggio.

Annotazioni

Il progettista aggiunge il codice BindingSource.EndEdit solo per il primo elemento trascinato e rilasciato in un modulo. Pertanto, è necessario aggiungere una riga di codice per chiamare il EndEdit metodo per ciascuno dei BindingSource nel modulo. È possibile aggiungere manualmente una riga di codice per chiamare il metodo EndEdit per ogni BindingSource oggetto. In alternativa, è possibile aggiungere il EndEditOnAllBindingSources metodo al form e chiamarlo prima di eseguire un salvataggio.

Il codice seguente usa una query LINQ (Language Integrated Query) per scorrere tutti i BindingSource componenti e chiamare il EndEdit metodo per ognuno BindingSource in un modulo.

Per chiamare EndEdit per tutti i componenti BindingSource in un modulo

  1. Aggiungere il codice seguente al form che contiene i BindingSource componenti.

    private void EndEditOnAllBindingSources()
    {
        var BindingSourcesQuery =
            from Component bindingSources in this.components.Components
            where bindingSources is BindingSource
            select bindingSources;
    
        foreach (BindingSource bindingSource in BindingSourcesQuery)
        {
            bindingSource.EndEdit();
        }
    }
    
  2. Aggiungere la riga di codice seguente immediatamente prima di qualsiasi chiamata per salvare i dati del modulo (il TableAdapterManager.UpdateAll() metodo ):

    EndEditOnAllBindingSources();