Convalida Celle DataGridviewer

lunedì 18 maggio 2009 - 15.26

dvd75 Profilo | Newbie

Avrei un altro piccolo problemuccio:
Ho un DG con le celle editabili in cui ci sono 3 colonne :
la 1°)- è impostata come "DataGridViewComboBoxColumn" quindi recupero un valore da un elenco
la 2°)- Inserisco il numero dei pezzi
la 3°)- Inserisco la lunghezza dei pezzi
Ho la necessità di impedire o controllare l'immissione di determinati valori che ovviamente non siano ZERO o valori alfabetici o NULLI.

Per adesso sono solo riuscito ad impostare i valori di default a zero con questo codice :

Private Sub dgDistinta_AP_DefaultValuesNeeded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowEventArgs) Handles dgDistinta_AP.DefaultValuesNeeded

'IMPOSTA VALORI DI DEFAULT
e.Row.Cells(1).Value = 0 'PEZZI
e.Row.Cells(2).Value = 0 'LUNGHEZZA

End Sub

Come faccio per il resto? Grazie ancora

alexmed Profilo | Guru

Ciao
Seguendo l'esempio fornito dalla guida l'unica cosa che son riuscito a sfornare è questa:
(http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellendedit(VS.80).aspx)

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Non mi convince molto, ma fà si che se non inserisci un valore numerico non ti fà uscire dalla cella (in nessun modo ed oltretutto blocca completamente l'applicazione).
Vedi tu.

Ciao


alexmed

Jeremy Profilo | Guru

Ciao David
Prova a vedere se ti è utile l'evento CellValidating ....

Facci sapere...
Ciao

OOooops ... scusa Alex non avevo visto il codice che avevi postato tu....
Cerca di capire l'ora tarda.

dvd75 Profilo | Newbie

grazie ragazzi, in effetti ho letto anche sul libro di sceppa che controllare nei DG è "dura", la meglio sarebbe usare una piccola form per inserire righe, ma dato che nella mia applicazione la velocità di inserimento è molto importante non posso usare questa tecnica che sicuramente ha i suai vantaggi in fatto di convalida

dvd75 Profilo | Newbie

Ho fatto qualche prova e ho notato che oltre ai Vs. suggerimenti, se scrivo un semplice messaggio nell'evento "DataError" i valori non validi vengono cmq intercettati quindi per adesso opto per questa soluzione, anche se ho il sospetto che ovviamente non sia molto corretta, ma per adesso pare funzioni.

Avrei però un altro dubbio, ho una cella con una combobox da cui recupero valori numerici, ecco per convalidare questo campo, sembra non funzionare nemmeno il codice dell'esempio MSDN(*)...io ho bisogno di obbligare l'utente a selezionare un valore dall'elenco, avete idee?

(*)

Private Sub dgDistinta_AP_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgDistinta_AP.CellValidating


'CONTROLLO CELLA PROFILO
If Me.dgDistinta_AP.Columns(e.ColumnIndex).Index = 0 Then 'CELLA ELENCO
If e.FormattedValue IsNot Nothing AndAlso String.IsNullOrEmpty(e.FormattedValue.ToString()) Then
(**) MsgBox("Non sono ammessi valori NULLI!", MsgBoxStyle.Critical)
e.Cancel = True
End If
End If

End Sub

(**) COSA STRANA:
se uso alla lettera il codi di esempio così :
dataGridView1.Rows(e.RowIndex).ErrorText = "Non sono ammessi valori NULLI!"
nella mia DG non appare nulla...non viene visualizzato l'errore di riga come mai?

PS. Così funziona :

Private Sub dgDistinta_AP_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgDistinta_AP.CellValidating

'CONTROLLO CELLA PROFILO
If Me.dgDistinta_AP.Columns(e.ColumnIndex).Index = 0 Then
If e.FormattedValue.ToString() = "" Then
MsgBox("Scegliere un profilo dall'elenco!", MsgBoxStyle.Critical)
e.Cancel = True
End If
End If

End Sub

Ma viene rilevato l'errore solo se ci si posiziona prima sulla cella e poi si passa ad un altra, io dovrei controllare, che anche quando un utente si sposta dalla cella pezzi o lunghezza, sia verificato il contenuto della cella PROFILO, poiche per inserire una nuova riga nel DG non è obbligatorio passare prima dalla cella PROFILO, quindi mi posso ritrovare una nuova riga, senza nessun valore nella cella PROFILO, che se non selezionata non mi scatena l'evento validating...volevo evitare di impostare un valore di default anche per questa cella visto che vi sono valori ben precisi e che non ci posso inserire uno ZERO


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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5