domenica 19 febbraio 2012

Tutorial Silverlight datagrid parte 6 vb.Net e C#

Riporto l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_tutorial-silverlight-datagrid-parte-6-vb_1138.aspx





Introduzione
Il tutorial sul controllo Datagrid, che da alcuni mesi stiamo trattando, continua con altre interessanti aspetti, ed in particolare sugli eventi esposti da questo controllo.
Il datagrid, fornisce al programmatore ampia flessibilità e dispone diversi eventi per gestire nel modo migliore i dati.
Riprendendo gli esempi precedenti, vediamo come applicare nel codice precedente nel controllo datagrid, la gestione di alcuni eventi





Stesura di codice
Prendendo l’esempio precedente, selezioniamo il controllo datagrid e nella finestra delle proprietà, selezioniamo l’evento "LoadingRow" il quale si scatena durante il caricamento dei dati nel controllo datagrid.
In questo evento, verifichiamo che il valore nella cella sia uguale al testo “Emanuele” in tal caso, impostiamo di colore rosso la cella che contiene tale valore.









VB.Net





Private Sub DataGrid1_LoadingRow(sender As System.Object, e As System.Windows.Controls.DataGridRowEventArgs) Handles DataGrid1.LoadingRow





'ottengo l'indice della riga





MessageBox.Show(e.Row.GetIndex())





Dim pers As New Persona





pers = CType(e.Row.DataContext, Persona)





If pers.Nome = "Emanuele" Then





'imposto la riga di colore verde





e.Row.Background = New SolidColorBrush(Colors.Green)





'ottengo la cella della prima colonna quella del nome





Dim celle = DataGrid1.Columns(0).GetCellContent(e.Row)





'imposto la cella con il valore, con lo sfondo rosso





Dim cella As DataGridCell = CType(celle.Parent, DataGridCell)





cella.Background = New SolidColorBrush(Colors.Red)





End If





End Sub









C#





private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)





{





//ottengo l'indice della riga





MessageBox.Show(e.Row.GetIndex().ToString());





Persona pers = new Persona();





pers = (Persona)e.Row.DataContext;





if (pers.Nome == "Emanuele")





{





//imposto la riga di colore verde





e.Row.Background = new SolidColorBrush(Colors.Green);





//ottengo la cella della prima colonna quella del nome





var celle = dataGrid1.Columns[0].GetCellContent(e.Row);





//imposto la cella con il valore, con lo sfondo rosso





DataGridCell cella = (DataGridCell)celle.Parent;





cella.Background = new SolidColorBrush(Colors.Red);





}









}












Come si vede dal codice precedente, si crea un oggetto, che corrisponde alla sorgente dati impostata nel controllo datagrid, una volta effettuato il casting della proprietà Datacontext, della proprietà Row, verifichiamo che la proprietà "Nome", contiene il valore “Emanuele”.
In tal caso impostiamo lo sfondo di tutta la riga di colore verde, mentre lo sfondo della cella che contiene il valore lo impostiamo di colore rosso.
L’evento "CellEditEnding" si verifica nel momento in cui è terminata la modifica che si sta compiendo in una determinata cella.
Tramite la proprietà “Cancel” possiamo validare o non la modifica, permettendo di non perdere il focus nella cella.
Qui di seguito si riporta un esempio, per entrambi i linguaggi.








VB.Net





Private Sub DataGrid1_CellEditEnding(sender As System.Object, e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles DataGrid1.CellEditEnding





MessageBox.Show(e.Column.Header)





'non permetto che la cella perda il focus





e.Cancel = True





End Sub









C#





private void dataGrid1_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)





{





MessageBox.Show(e.Column.Header.ToString());





//non permetto che la cella perda il focus





e.Cancel = true ;





}












In fine, vediamo un altro evento, riguardante la digitazione del testo nella cella.
Tramite l’evento "keydown", possiamo verificare il carattere digitato, per esempio nel caso che abbiamo una colonna relativa ai nomi e cognomi delle persone, possiamo verificare che il testo inserito nella cella, è solo un lettera, anziché un numero o altro.
Tramite la proprietà Key, dell’oggetto “KeyEventArgs”, verifichiamo che tipo di carattere è stato digitato. La proprietà “Handled”, impostata a true, permette di non validare il carattere e quindi la mancanza di inserire il carattere digitato.
Riportiamo qui di seguito un esempio di codice che verifica il carattere digitato.








VB.Net





Private Sub DataGrid1_KeyDown(sender As System.Object, e As System.Windows.Input.KeyEventArgs) Handles DataGrid1.KeyDown





If e.Key < Key.A Or e.Key > Key.Z Then





e.Handled = True





End If





End Sub









C#





private void dataGrid1_KeyDown(object sender, KeyEventArgs e)





{





if (e.Key < Key.A e.Key > Key.Z )





{





e.Handled = true;





}





}








Conclusioni
L’articolo ha fornito alcuni elementi di base sull’utilizzo degli eventi del controllo datagrid, un controllo dotato di tantissimi eventi, fornendo al programmatore, ampia scelta e completa libertà e flessibilità.
Non è difficile gestire in maniera adeguata la gestione dei dati, tramite questo controllo, visto le potenzialità offerte possiamo lavorare in maniera ottimale sui dati.
Gli eventi offerti da questo controllo sono variati, lasciamo al lettore di scoprire gli altri eventi.



A questo indirizzo http://emanuelemattei.blogspot.com/2012/01/tutorial-datagrid-silverlight-parte-5.html trovate la quinta parte del tutorial.

Nessun commento: