Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] Problema con DataGridView
Forum - C# / VB.NET - [C#] Problema con DataGridView

Avatar
balto (Ex-Member)
Rookie


Messaggi: 44
Iscritto: 03/11/2009

Segnala al moderatore
Postato alle 14:43
Martedì, 02/02/2010
Ciao ragazzi, ho un problema con il controllo DataGridView. Per ogni sua colonna, ho settato la sua proprietà ValueType su float. Di conseguenza, quando inserisco un certo contenuto che non sia di tipo float in una qualsiasi cella del controllo, con l'evento DataError faccio visualizzare un messaggio di errore. Tuttavia vorrei che oltre al messaggio, il valore della cella diventi zero.

Ho provato con questo ma senza risultati:
Codice sorgente - presumibilmente C# / VB.NET

  1. private void viewData_DataError(object sender, DataGridViewDataErrorEventArgs e)
  2.         {
  3.             MessageBox.Show("Il dato inserito non è di un formato valido. Deve essere necessariamente un valore numerico. Se il valore è decimale, utilizza il carattere '.' come separatore.");
  4.             viewData[e.ColumnIndex, e.RowIndex].Value = 0;
  5.         }



Il valore nella cella non cambia.
Avete dei suggerimenti? Grazie =)


Importante è ricordare, ma più importante è dimenticare.
(Rainer Maria Rilke)
PM Quote
Avatar
balto (Ex-Member)
Rookie


Messaggi: 44
Iscritto: 03/11/2009

Segnala al moderatore
Postato alle 21:50
Martedì, 02/02/2010
Ho pensato di verificare all'evento KeyPress che il tasto sia numerico o un punto. Se lo è, faccio scrivere il valore del tasto, altrimenti no. Secondo voi è una buona soluzione?

Ultima modifica effettuata da balto il 02/02/2010 alle 21:50


Importante è ricordare, ma più importante è dimenticare.
(Rainer Maria Rilke)
PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 22:34
Martedì, 02/02/2010
secondo me è sbagliato....gli errori vanno gestiti a monte...
se non vuoi usare Regex...puoi usare la TryParse del float...
prova a parsarlo come float se da errore fai apparire un messagebox di errore
Codice sorgente - presumibilmente C#

  1. float fVal;
  2.             if (float.TryParse(strFloatVal, out fVal))
  3.             {
  4.                 //inserisci il valore dove vuoi (fVal)
  5.             }
  6.             else
  7.             {
  8.                 MessageBox.Show("Valore non Float", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error);
  9.             }



a domanda precisa, risposta precisa...
a domanda generica, risposta generica...
PM Quote
Avatar
balto (Ex-Member)
Rookie


Messaggi: 44
Iscritto: 03/11/2009

Segnala al moderatore
Postato alle 22:43
Martedì, 02/02/2010
Grazie dell'aiutro Gianluca, tuttavia ho risolto con l'unboxing.
Si, infatti la proprietà Value della cella è di tipo object, quindi è bastato scrivere:

Codice sorgente - presumibilmente Plain Text

  1. viewData[e.ColumnIndex, e.RowIndex].Value = (object)0;



Grazie lo stesso =)
Ciao


Importante è ricordare, ma più importante è dimenticare.
(Rainer Maria Rilke)
PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 22:52
Martedì, 02/02/2010
(object)0; ti da un Int32....non un float...


a domanda precisa, risposta precisa...
a domanda generica, risposta generica...
PM Quote
Avatar
balto (Ex-Member)
Rookie


Messaggi: 44
Iscritto: 03/11/2009

Segnala al moderatore
Postato alle 22:54
Martedì, 02/02/2010
Non è questo il punto, io volevo semplicemente che se il valore non era float, diventasse zero. Quindi va bene così. =)


Importante è ricordare, ma più importante è dimenticare.
(Rainer Maria Rilke)
PM Quote