Oppure

Loading
02/02/10 13:43
balto
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:
        private void viewData_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            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.");
            viewData[e.ColumnIndex, e.RowIndex].Value = 0;
        }


Il valore nella cella non cambia.
Avete dei suggerimenti? Grazie =)
aaa
02/02/10 20:50
balto
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 02/02/10 20:50
aaa
02/02/10 21:34
Gianluca87
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
float fVal;
            if (float.TryParse(strFloatVal, out fVal))
            {
                //inserisci il valore dove vuoi (fVal)
            }
            else 
            {
                MessageBox.Show("Valore non Float", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
aaa
02/02/10 21:43
balto
Grazie dell'aiutro Gianluca, tuttavia ho risolto con l'unboxing.
Si, infatti la proprietà Value della cella è di tipo object, quindi è bastato scrivere:

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


Grazie lo stesso =)
Ciao
aaa
02/02/10 21:52
Gianluca87
(object)0; ti da un Int32....non un float...
aaa
02/02/10 21:54
balto
Non è questo il punto, io volevo semplicemente che se il valore non era float, diventasse zero. Quindi va bene così. =)
aaa