Tutorial Silverlight datagrid parte 6 vb.net e c#

Articolo parte sesta di una lunga serie che illustra l'utilizzo del controllo Datagrid nella tecnologia Silverlight tramite il linguaggio di programmazione VB.Net e C#.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

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.