Buonasera a tutti,
Win10
.NET Framework 2.0
.mdb 2002 - 2003
Da circa 20 anni sto lavorando su un db di un prg che uso per il mio lavoro e dopo averci aggiunto alcune Tabelle ed alcune Query mi sono personalizzato la visualizzazione dei dati
Da un po' di tempo i BtnExit (Me.Close()) di alcuni Form (non tutti) mi ritornano una finestra di errore che prima non era mai comparsa.
In un Form ho un DataGridView che viene popolato con i dati di una Query che si trova nel db.
Al momento di uscire dal Form, mi ritorna la seguente eccezione:
System.IndexOutOfRangeException
e alla fine della finestra mi dice di gestire l'evento DataError
Leggendo un po' qua e un po' la ho cercato di capirci di piu', ma poi si arriva ad un punto dove difficilmente si vede la soluzione, ed allora bisogna chiedere un consiglio.
Cerco di spiegarvi cosa ho capito e, nel caso facessi un po' di confusione, vi informo che ho circa 300 anni e sono autodidatta. Uso il VB e le righe di codice che scrivo sono molto basic.
Sono partito dalla Tabella 10.2. DataGridViewDataErrorContexts Flags Enumeration Values
dove l' e.Context è "Display"
Display dice che l'evento DataError in un DataGridView bindato si presenta quando il Commit non riesce e non c'e' correlazione fra i dati di una colonna del DataGridView e la tabella del db.
Ho cercato anche di scoprire quale colonna fosse con
If (e.Context = DataGridViewDataErrorContexts.Display) Then
Dim msg As String = String.Format("Errore:{0},{1},{2}", e.Exception.GetType().ToString(), e.ColumnIndex, e.RowIndex)
MessageBox.Show(msg)
End If
dove mi da come
ColumnIndex = -1 e
RowIndex = 0
e poi 0,0 1,0 ecc... quindi non ho capito quale colonna fosse (ma puo' partire da -1?)
Siccome la data nel db e' in formato Double, per visualizzarla in formato Date la devo formattare:
Private startDate As New Date(1899, 12, 30)
Private Sub MyDataGridView_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles MyDataGridView.CellFormatting
'La colonna "data" è la numero 3.
'Note(0)
'Ragione_Sociale(1)
'numero(2)
'data(3)
Try
If Me.MyDataGridView.Columns(e.ColumnIndex).HeaderText = "data" Then
If e.Value Is DBNull.Value Then Exit Sub
If e.Value IsNot Nothing Then e.Value = startDate.AddDays(Convert.ToDouble(e.Value)).ToShortDateString
End If
Catch ex As Exception
Dim lNewVariable2 As String = "mailto:@libero.it?subject=Invio Dati&body= {0}{1}{2}"
System.Diagnostics.Process.Start(String.Format(lNewVariable2, ex.Message, Environment.NewLine, ex.StackTrace))
End Try
End Sub
Il Commit dice:
Commit
An error occurred when the grid tried to write the parsed value to the underlying data source.
Devo riportare i dati a Double prima di uscire?
Grazie per l'attenzione e buona serata a tutti!
Massimo