[Risolto]RowChanging

di il
3 risposte

[Risolto]RowChanging

Buonasera, ho un form con dei campi associati ad una origine dati, al caricamento del form aggiungo un evento che dovrebbe avvisarmi di eventuali modifiche effettuate ai record,appena effettuo una modifica e premo il pulsante per scorrere avanti di un record, un msgbox mi avvisa della modifica, come faccio ad annullare le modifiche effettuate?
Ho provato in questo modo ma non funziona
Private Sub FormClienti_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      
        Me.ClientiTableAdapter.Fill(Me.AppDataSet.clienti)
        AddHandler Me.AppDataSet.clienti.RowChanging, AddressOf Row_Changing
End Sub
    Private Sub Row_Changing(ByVal sender As Object,
    ByVal e As DataRowChangeEventArgs)
	    If MsgBox("sono presenti modifiche, vuoi annullare?", vbYesNo + vbQuestion) = vbYes Then
            Me.AppDataSet.clienti.RejectChanges()
        End If
        
    End Sub
mi ritorna questo messaggio
System.Data.InRowChangingEventException: 'Impossibile chiamare CancelEdit() dall'interno di un evento OnRowChanging. Generare exception per annullare questo aggiornamento.'
Come faccio ad annullare le modifiche effettuate?

Grazie

3 Risposte

  • Re: [Risolto]RowChanging

    Il RowChanging viene invocato quando uno dei campi della riga cambia. Con il codice scritto così, ogni volta che modifichi un campo, cerchi di fare il rollback sulla tabella, infilandoti in quello che sarebbe un loop infinito.
    Piuttosto io metterei, nel gestore del click che scorre avanti/indietro, il controllo che se il metodo GetChanges() della tabella non restituisce nulla, allora proseguo con lo scorrere della selezione, altrimenti decido cosa fare.
  • Re: [Risolto]RowChanging

    Potresti mostrami un esempio?, io ho provato in diversi modi ma nulla, quello di prima è uno dei tanti, ho provato pure in questo modo ma nulla, in realtà funziona ma intercetta la modifica quando già mi trovo nel record successivo
    Private Sub BindingNavigatorMoveNextItem_Click(sender As Object, e As EventArgs) Handles BindingNavigatorMoveNextItem.Click
    
            If Me.AppDataSet.HasChanges(DataRowState.Modified) Then
                MsgBox("ciao")
    
            End If
        End Sub
  • Re: [Risolto]RowChanging

    Ho risolto usando il metodo EndEdit del BindingSource, in modo da applicare le modifiche così da essere subito rilevate.

    Grazie
Devi accedere o registrarti per scrivere nel forum
3 risposte