Validazione Campo DataGrid

giovedì 12 gennaio 2012 - 15.08
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows 7  |  Visual Studio 2010  |  SQL Server Express

marco.morgia Profilo | Junior Member

Ciao.

vorrei qualche consiglio su come implementare la validazione di un dataGrid.
Nello specifico quello che mi servirebbe è una validazione del carateere appena digito sulla tastiera, in teoria un evento del tipo key_press che mi permetta di inserire solo numeri e non lettere.

Ho provato anche a utilizzare l'evento key_press sul dataGrid ma non lo gestisce.

Grazie

Vinsent Profilo | Senior Member

Ciao, io uso il codice sotto su una textbox per verificare se i tasti da 0 a 9 sono premuti dalla tastiera o dal tastierino e se NumLock è attivo o meno, l' ho provato su un DataGridView e sembra non dare problemi.
Vedi tu se può esserti utile o se riesci ad adattarlo per le tue esigenze:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

marco.morgia Profilo | Junior Member

Ciao
allora innanzitutti grazie per l'aiuto. Allora ho provato a seguire il tuo consiglio e mi sono accorto che quando inserisco valori all'interno di un datagrid gli eventi key_.... non vengono visti. Vengono visti solo quando non sono in inserimento di una nuova riga sul datagrid.

A me serve invece proprio il controllo sull'inserimento.

alx_81 Profilo | Guru

>Ciao
Ciao

>allora innanzitutti grazie per l'aiuto. Allora ho provato a seguire
>il tuo consiglio e mi sono accorto che quando inserisco valori
>all'interno di un datagrid gli eventi key_.... non vengono visti.
>Vengono visti solo quando non sono in inserimento di una nuova
>riga sul datagrid.
>A me serve invece proprio il controllo sull'inserimento.
potresti pensare ad una validazione lato client (senza tralasciare quella lato server, mi raccomando). Ci sono librerie che ti danno questa funzionalità via javascript, e più precisamente, con jQuery.
La più famosa è questa: http://bassistance.de/jquery-plugins/jquery-plugin-validation/

funziona molto bene e ti consente anche le azioni lato server, senza dover ricaricare ogni volta la pagina.
Anche la user experience è migliorata grazie ad AJAX.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Vinsent Profilo | Senior Member

Premesso che:
1 - non ho la più idea(+-) di cosa stia parlando alx_81
2 - hai impostato i tag "C#" e "SQL Server Express" che non avevo visto e non conosco...
3 - da quanto ne ho capito su Google: key_press e affini su delle celle non sono contemplati, a meno(penso) di crearseli da soli...

spulciando su msdn ho trovato questo:
http://msdn.microsoft.com/it-it/library/system.windows.forms.datagridviewcellvalidatingeventargs.aspx#Y0

in pratica esegue il validating della cella attiva e con gli eventi CellBeginEdit e CellEndEdit:
http://msdn.microsoft.com/it-it/library/system.windows.forms.datagridview.cellbeginedit.aspx
http://msdn.microsoft.com/it-it/library/system.windows.forms.datagridview.cellendedit.aspx
si può intervenire sul valore del prima e dopo la modifica della cella.
Per quanto mi riguarda, nel mio programma/laboratorio, ho risolto la modifica delle celle dei datagridview demandandole ad una form con controlli più "malleabili" per lo scopo...

alx_81 Profilo | Guru

Ciao a tutti
io ho fatto forse un errore di valutazione dei tag, dando per scontato che il DataGrid fosse web. Noto ora che invece non è indicato da nessuna parte se siamo su windows o web.
Detto questo, e credo che siamo su winforms, la stanza corretta sarebbe http://www.dotnethell.it/forum/Windows-Forms.aspx

Se si tratta di una windows forms puoi fare comunque la validazione tramite regular expression.
Hai mai sentito parlare?
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

marco.morgia Profilo | Junior Member

Ciao.

Scusate se ho sbagliato forum.

Si di regular expression ne ho sentito parlare, ma sinceramente non le ho mai utilizzate.

alx_81 Profilo | Guru

>Si di regular expression ne ho sentito parlare, ma sinceramente
>non le ho mai utilizzate.
cerchiamo di risolverlo qui, nessun problema

quindi parliamo di windows forms?
se sì: http://msdn.microsoft.com/en-us/library/ms229603.aspx

vedrai anche le masked text box..
prova a dargli una letta

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Vinsent Profilo | Senior Member

Se può essere utile...ho "accrocchiato" un mix tra "tasto premuto" e validazione del testo di una cella con un userControl derivato da datagridview, è in vb, fa schifo ma portate pazienza...lo faccio per hobby...
In pratica ho un datagridview con due colonne, la prima accetta solo numeri nel senso che se si preme il tasto "a" non viene scritto sulla cella, la seconda fa il validating sul formato come data.
Bisogna creare un progetto con una form e una classe contenente il codice:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Quindi compilare il progetto.
Poi, in modalità "progettazione" della form aggiungere "dgv_modificato" dalla "casella degli strumenti" e scrivere nel codice della form:
Dim ds1 As New Data.DataSet Private Sub Form1_Load() Handles MyBase.Load ds1.DataSetName = "abc" ds1.Tables.Add("1") ds1.Tables("1").Columns.Add("numeri da 1 a 9") ds1.Tables("1").Columns.Add("data dd/MM/yyyy") Dim riga(1) As String riga(0) = "1" riga(1) = "01/01/2011" ds1.Tables("1").Rows.Add(riga) ds1.Tables("1").Rows.Add(riga) ds1.Tables("1").Rows.Add(riga) Dgv_modificato1.DataSource = ds1.Tables(0) End Sub

Scusate la mancanza di commenti sul codice(chiedete pure spiegazioni...) e tenete presente che è mooooolto "work in progress"
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5