+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 4 su 4

DataGridView.DataError Event

  1. #1
    Post
    5
    Like Inviati  
    0
    Like Ricevuti  
    0
    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
    Ultima modifica di AntonioG; 19-01-2021 20:35  Motivo: Usa i tag CODE per il codice!

  2. #2
    Sgrubak non è in linea Scribacchino
    Post
    598
    Like Inviati  
    11
    Like Ricevuti  
    12
    Quote Originariamente inviato da Rustvik Aardvark Visualizza il messaggio
    quindi non ho capito quale colonna fosse (ma puo' partire da -1?)
    No... È in base zero.


    Quote Originariamente inviato da Rustvik Aardvark Visualizza il messaggio
    Siccome la data nel db e' in formato Double, per visualizzarla in formato Date la devo formattare:
    Azzardo che il problema sia qui... La colonna di partenza deve essere una data.

    Quote Originariamente inviato da Rustvik Aardvark Visualizza il messaggio
    Da un po' di tempo i BtnExit (Me.Close()) di alcuni Form (non tutti) mi ritornano una finestra di errore
    Questo non è chiaro... Non te lo fa solo il form su cui c'è la griglia? Gli altri form hanno comunque una griglia? Queste griglie sono associate sempre alla stessa sorgente?
    Quote Originariamente inviato da Rustvik Aardvark Visualizza il messaggio
    In un Form ho un DataGridView che viene popolato con i dati di una Query che si trova nel db.
    Specifica bene come le popoli: come data source della griglia, cosa imposti? Una tabella? un BindingSource? Una lista?

  3. #3
    Post
    5
    Like Inviati  
    0
    Like Ricevuti  
    0
    Buonasera a tutti,

    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    No... È in base zero.
    Potrebbe essere interessante investigare qui perchè non puo' partire da -1

    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Azzardo che il problema sia qui... La colonna di partenza deve essere una data.

    Questo non è chiaro... Non te lo fa solo il form su cui c'è la griglia? Gli altri form hanno comunque una griglia? Queste griglie sono associate sempre alla stessa sorgente?
    Nel db ci sono una settantina di Query ed ognuna serve per popolare una griglia.
    Tutte queste Query prendono i dati dalle tabelle originali (le tabelle fatte da me hanno la data in formato Date e non danno problemi) e popolano ciascuna una griglia di un Form.
    Ho all'incirca un'ottantina di Form e quasi tutti (se non tutti) hanno una colonna "data" che viene formattata con il Dgv.CellFormatting per visualizzare la data in formato Date (11/06/2021), mentre nel db e' Double (44358).
    Di questi solamente 5 o 6 danno errore, non tutti. E credo che, come dici tu, ci sia una mancanza di corrispondenza fra la griglia e la tabella.
    Ovviamente i Form con griglie bindate ad una Query non salvano i dati ma li visualizzano soltanto.

    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Specifica bene come le popoli: come data source della griglia, cosa imposti? Una tabella? un BindingSource? Una lista?
    Ho sempre utilizzato il wizard:
    1. Associo un db al progetto e Visual Studio mi crea la stringa di connessione
    2. Dataset
    3. Aggiungo un Form al progetto e dalla finestra Origini dati trascino una tabella nel Form appena creato. Il prg mi inserisce una griglia e crea la connessione bindando la griglia.
    4. Lancio il prg e la griglia visualizza i dati

    So che tutte queste cose le sai, ma potrebbe esserci qualcuno che puo' trovare vantaggio da questa spiegazione....

    ho un Form che si chiama BolleDaFatturare

    Public Class BolleDaFatturare
    End Class

    In questo Form c'e' una griglia DTBolleDaFatturareDataGridView.
    La proprietà DataSource mi dice che i dati sono correntemente associati a DTBolleDaFatturareBindingSource

    Poi ho un altro Form BollePagate con una griglia DTBollePagateDataGridView bindata tramite un BindingSource DTBollePagateBindingSource ad una query che si chiama DTBollePagate...e cosi via.

    Ogni griglia ha la sua origine dati ed io, smanecchiando un po' me li visualizzo, li esporto in Excel, li converto in .pdf e li pubblico su un sito.

    Grazie per l'attenzione.

    OK per i Tag. Grazie. In questo msg non ci sono righe di codice, quindi niente Tag.

    Massimo

  4. #4
    Sgrubak non è in linea Scribacchino
    Post
    598
    Like Inviati  
    11
    Like Ricevuti  
    12
    Capito. Mi spiace ma, come ho imparato a mie spese, il wizard fa più male che altro... Per il momento, visto che buona parte del lavoro è già fatto, ti suggerirei di:
    1) impostare tutte le griglie in ReadOnly
    2) commenta tutti i gestori degli eventi CellFormatting. Stai sbagliando ad usarli... Non puoi cambiare il valore della cella per farlo diventare una stringa.

    Per formattare la cella, dopo che l'associazione alla sorgente è stata effettuata, individua la colonna che mostra una data e su quella colonna imposta la proprietà DefaultCellStyle.Format.

    Così dovresti aggirare il problema.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. on_change event
    Da Mariovb nel forum PHP
    Risposte: 4
    Ultimo Post: 06-05-2011, 18:40
  2. click event su swf flash
    Da sal21 nel forum Microsoft Word
    Risposte: 0
    Ultimo Post: 14-09-2010, 14:22
  3. Mouse event a coordinate precise
    Da killamah nel forum Visual Basic 6
    Risposte: 3
    Ultimo Post: 30-06-2009, 09:07
  4. Event-Based Programming in Delphi
    Da Maxinforum1967 nel forum Delphi
    Risposte: 1
    Ultimo Post: 27-11-2007, 21:34
  5. Raise Event da modulo
    Da farolfo nel forum Visual Basic 6
    Risposte: 7
    Ultimo Post: 03-05-2007, 17:04