Datatable .delete

di il
3 risposte

Datatable .delete

Ho un tabella Access,che alimenta un datatable.
Il seguente codice effettua queste operazioni:
a)esegue l'aggiornamento (insert,update,delete) della tabella access
b)esegue ,sulla tabella,acceptchange:

   Private Sub accept_Click(sender As Object, e As EventArgs) Handles accept.Click
       opt = CType(msg.Accetta, DialogResult)
       If opt = DialogResult.Yes Then
           cls.cb = New OleDbCommandBuilder(cls.da)
           cls.da.Update(ds, "legali")
           tempDT.AcceptChanges()
           ListBox1.Items.Clear()
       End If
   End Sub

Il codice effettua tutte le operazioni richieste, ma si verifica un problema che non mi consente di proseguire:
se scorro i records,nel momento in cui nella posizione X c'era un elemento cancellato, mi solleva una eccezione del
tipo "DeletedRowInaccessibleException" e tutti i records successivi vengono letti in modo anomale (il decimo di restituisce i dati dell'undicesimo,l'undicesimo i dati del dodicesimo e così via).

Come posso allora gestire l'eccezione ? come posso ripristinare il normale funzionamento della sequenza dei records? 
E' possibile eseguire un acceptchange sul singolo elemento cancellato, ma come faccio ad aggiornare la tabella sottostante limitatamente a quel record?

Grazie per qualsiasi suggerimento.

3 Risposte

  • Re: Datatable .delete

    Questo metodo funziona, ma sono alla ricerca di una soluzione nell'ambito di currencymanager e/o datatable.
    Grazie per la Vs. attenzione

       Private Sub DeleteItem_Click(sender As Object, e As EventArgs) Handles DeleteItem.Click
           opt = CType(msg.delete, DialogResult)
           If opt = DialogResult.Yes Then
               Dim elemento As DataRow = tempDT.Rows(cm.Position)
               ListBox1.Items.Add(elemento.Item(1).ToString & " - permanent cancellation")
               Dim myId As String = elemento.Item(0).ToString
               query = "Delete from medici where id=" & Val(myId)
               cls.sql(query)
               elemento.Delete()
               elemento.AcceptChanges()
               cm.Position = 0
               visualizzaRecord(cm.Position)
           End If
       End Sub
  • Re: Datatable .delete

    Quando esegui un delete su di una datatable tutti i record seguenti (come hai già avuto modo di notare) non sono più accessibili per problemi di indici.

    Probabilmente hai il comando datatable.delete dentro su di un ciclo FOR, per cui il trucchetto è quello di fare il ciclo partendo dal basso e non dall'alto.

    Ad esempio:

    For X = miadatatable.Rows.Count - 1 To 0 Step -1
        .... eseguo le operazioni che devo
    Next
    
  • Re: Datatable .delete

    Grazie,SirJo.

    Scusa per il ritardo:piccoli problemi di salute!

    Ho constatato -usando la binding navigator- che andando indietro funziona (l'eccezione viene rilevata, ma l'ordine dei records viene rispettato) e non ho dubbi che in un ciclo for (partendo dal basso) avrei un esito positivo.

    Però, come posso “risolvere” l'eccezione che viene aperta quando mi devo muovere liberamente  (sia avanti che indietro) usando appunto la binding navigator?

    Grazie mille.

Devi accedere o registrarti per scrivere nel forum
3 risposte