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)
'vieto 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());
//vieto 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.
Qui https://www.iprogrammatori.it/articoli/programmazione/art_tutorial-datagrid-di-silverlight-parte-p_1105.aspx trovate la prima parte.
La seconda parte si trova qui https://www.iprogrammatori.it/articoli/programmazione/art_tutorial-controllo-datagrid-di-silverlig_1079.aspx mentre la terza parte qui https://www.iprogrammatori.it/articoli/programmazione/art_tutorial-datagrid-in-silverlight-tramite_1080.aspx.
La quarta parte consultabile qui https://www.iprogrammatori.it/articoli/programmazione/art_tutorial-silverlight-alla-scoperta-del-d_1134.aspx mentre qui https://www.iprogrammatori.it/articoli/programmazione/art_silverlight-tutorial-datagrid-parte-5-vb_1100.aspx la quinta parte.