Ancora su HASCHANGES!

di il
3 risposte

Ancora su HASCHANGES!

Ho il seguente codice. Sto cercando di imparare ad usare HasChanges , ma continuo ad avere seri problemi di comprensione.
Se aggiungo una voce alla tabella,haschanges lo rileva e posso agire conseguentemente.
Se ,invece,modifico e/o cancello una voce, RowState mi restituisce sempre 1 (detached)
E' evidente che sbaglio, è evidente che ho carenze conoscitive, ma vorrei venire a capo della questione (perchè il dataset non si modifica?).
Grazie.

Public Class Form7
    Dim cl As Class1 = New Class1
    Dim tempDT As New DataTable("anagrafica")
    Dim ds As New DataSet("dataset")
    Dim drow As DataRow
    Dim indice As Integer = 1
    Dim nrec As Integer
    Dim newrec As Boolean

    Private Sub Form7_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        cl.connessione()
        Dim query As String = "Select id,cognome,nome,nato,comune,indirizzo,civico from anagrafica order by cognome,nome"
        tempDT = cl.tabella(query, "anagrafica")
        ds.Tables.Add(tempDT)
        nrec = tempDT.Rows.Count
        FirstItem_Click(Me, EventArgs.Empty)
    End Sub

    Private Sub SaveItem_Click(sender As Object, e As EventArgs) Handles SaveItem.Click
        drow = tempDT.NewRow()
        If newrec = True Then
            newrec = False
            drow(0) = My.Settings.ID
            drow(1) = CognomeTextBox.Text
            drow(2) = NomeTextBox.Text
            drow(3) = NatoDateTimePicker.Text
            drow(4) = ComuneTextBox.Text
            drow(5) = IndirizzoTextBox.Text
            drow(6) = CivicoTextBox.Text
            tempDT.Rows.Add(drow)
        Else
            drow(0) = IdTextBox.Text
            drow(1) = CognomeTextBox.Text
            drow(2) = NomeTextBox.Text
            drow(3) = NatoDateTimePicker.Text
            drow(4) = ComuneTextBox.Text
            drow(5) = IndirizzoTextBox.Text
            drow(6) = CivicoTextBox.Text
        End If

        ListBox1.Items.Add(String.Format("rowstate= {0}", drow.RowState))
    End Sub

    Private Sub DeleteItem_Click(sender As Object, e As EventArgs) Handles DeleteItem.Click
        ' Create a new DataRow.
        drow = tempDT.NewRow()
        drow.Delete()

        ListBox1.Items.Add("RowState=" & drow.RowState)
    End Sub

    Private Sub Form7_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
        If ds.HasChanges Then
            If MessageBox.Show(Me, "Confermi le modifiche apportate alla tabella?", "Avviso", MessageBoxButtons.YesNo) = DialogResult.Yes Then
                tempDT.AcceptChanges()
            Else
                tempDT.RejectChanges()
            End If
        End If
    End Sub

3 Risposte

  • Re: Ancora su HASCHANGES!

    Studia i DataRowState.

    Se non la aggiungi a nessuna datatable la datarow sarà sempre detached e il Delete non la cancella da nulla quindi non sarà mai deleted.

    Per salvare non si usa l'AcceptChanges, che in realtà rende tutte le righe Unchanged, ma si usa il metodo update del dataset/datatable a patto che sia presente il/i tableadapter, magari organizzato in un tableadaptermanager.
  • Re: Ancora su HASCHANGES!

    Come sempre, grazie.
    Ti prego di aver pazienza con me (75enne che si diverte ad esplorare la programmazione per tenere in esercizio il cervello!) e con tutti quelli che hanno ancora le idee confuse.
    A me ha sempre dato consigli,spunti e soluzioni e di questo non posso che esserti riconoscente.
    Grazie.Studierò anche i datarowstate,promesso.
  • Re: Ancora su HASCHANGES!

    Lieto di esserti stato d'aiuto.
    Alla prossima
Devi accedere o registrarti per scrivere nel forum
3 risposte