Incremento valore di 1 errato

giovedì 08 novembre 2018 - 18.21

jekisi Profilo | Senior Member

Salve a tutto il forum avrei il seguente problema:

Ho due form.

Sulla form1 ho le text Numerotextbox, Serietextbox e Codicetextbox sulla form2 ho una datagrid e 2

text Codicetextbox e Numerotextbox.

Aggiungo altre 2 textbox per fare l' incremento + 1 e nell' evento Load della form2 scrivo:

Me.TddtTableAdapter.Fill(Me.AziendaleDataSet.Tddt)
Me.TddtBindingSource.MoveLast()
If CodiceTextBox.Text = "" Then
CodiceTextBox.Text = "0"
TextBox2.Text = CodiceTextBox.Text + 1
Else
TextBox2.Text = CodiceTextBox.Text + 1
End If

Adesso andando in esecuzione apro la form2 e il valore si incrementa correttamente, ma se chiudo la

form2 e passo a form1 e riapro la form2 nella textbox2 mi spunta 1.

Io ho 4 righe sulla tabella, nella textbox2 mi dovrebbe spuntare sempre 5 come il primo avvio ma

non funge.

Dove sta il problema?

Distinti Saluti

Fabio Messina

Davide1986 Profilo | Junior Member

Buongiorno e spero che abbia risolto.

Per risolvere il problema che hai descritto, dobbiamo analizzare il codice e apportare alcune modifiche. Ecco una probabile soluzione, provo ad essere dettagliato:

## Analisi del problema

Il problema principale sembra essere che il valore nella TextBox2 non viene incrementato correttamente quando si riapre la Form2. Questo accade perché ogni volta che si apre la Form2, il codice nell'evento Load viene eseguito da capo, resettando il valore.

## Soluzione proposta

Per risolvere questo problema, dobbiamo assicurarci che il valore massimo del codice venga sempre recuperato correttamente dal database. Ecco come modificare il codice nell'evento Load della Form2:

```vb.net
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Riempie il DataSet con i dati dalla tabella Tddt
Me.TddtTableAdapter.Fill(Me.AziendaleDataSet.Tddt)

' Trova il valore massimo del codice nel DataSet
Dim maxCodice As Integer = 0
For Each row As DataRow In Me.AziendaleDataSet.Tddt.Rows
Dim codice As Integer
If Integer.TryParse(row("Codice").ToString(), codice) Then
If codice > maxCodice Then
maxCodice = codice
End If
End If
Next

' Incrementa il valore massimo trovato
TextBox2.Text = (maxCodice + 1).ToString()
End Sub
```

Questo codice fa quanto segue:

1. Riempie il DataSet con i dati dalla tabella Tddt.
2. Itera attraverso tutte le righe del DataSet per trovare il valore massimo del codice.
3. Incrementa il valore massimo trovato di 1 e lo assegna a TextBox2.

## Considerazioni aggiuntive

- **Gestione degli errori**: Assicurati di implementare una gestione degli errori adeguata, ad esempio per gestire il caso in cui non ci siano righe nel DataSet o se ci fossero problemi nella conversione dei valori.

- **Ottimizzazione**: Se la tabella Tddt contiene molte righe, potresti considerare di utilizzare una query SQL per ottenere direttamente il valore massimo dal database, anziché iterare attraverso tutte le righe nel codice VB.NET.

- **Sincronizzazione**: Assicurati che il valore del codice sia sincronizzato correttamente tra Form1 e Form2, specialmente se l'utente può modificare o aggiungere nuovi codici in entrambe le form.

- **Validazione**: Implementa una validazione per assicurarti che il nuovo codice generato non sia già presente nel database.

Implementando queste modifiche, dovresti risolvere il problema dell'incremento del codice quando riapri la Form2. Il valore in TextBox2 dovrebbe ora mostrare sempre il prossimo codice disponibile, indipendentemente da quante volte chiudi e riapri la form.


Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.imaginsystems.it
http://www.alpacasrl.it
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5