martedì 1 novembre 2011

[VB.NET] Visualizzare e Modificare Oggetti in DataGridView

Descrizione :
Una semplice tecnica per gestire una List() di Oggetti con il supporto di un DataGridView.

+ Articolo :

I records, all'interno di un DataGridView ( d'ora in poi DGV ), possono essere visti come rappresentazione di un insieme di Oggetti.
Non sempre una griglia dati ha lo scopo di essere connessa ad un DB.
Qui di seguito ne mostro un possibile utilizzo alternativo.

Sulla mia Form di Test ho un DGV, senza alcuna particolare proprietà necessaria a design ( le uniche proprietà necessarie sono descritte più avanti nel codice ), esattamente così come viene rilasciato su Form dalla Casella Strumenti.
In più qualche pulsante per eseguire operazioni comuni : aggiunta / modifica / rimozione di una Persona dall'insieme.

1. Ad esempio gestisco un insieme di Persone ( ogni Persona sarà un record nel DGV ) :

...
Private Persone As New List(Of Persona)
...

dove Persona è una semplice Classe :
Public Class Persona
 
    Private m_id As Integer
    Private m_nome As String
    Private m_cognome As String
 
    Public Property Id() As Integer
        Get
            Return m_id
        End Get
        Set(ByVal value As Integer)
            m_id = value
        End Set
    End Property
 
    Public Property Nome() As String
        Get
            Return m_nome
        End Get
        Set(ByVal value As String)
            m_nome = value
        End Set
    End Property
 
    Public Property Cognome() As String
        Get
            Return m_cognome
        End Get
        Set(ByVal value As String)
            m_cognome = value
        End Set
    End Property
 
End Class

2. Il codice di FormTest :
Public Class FormTest

    Private Persone As New List(Of Persona)
    Private personeBS As New BindingSource

    Private Sub FormTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        personeBS.DataSource = Persone
        DGV.DataSource = personeBS
        DGV.Columns("Id").ReadOnly = True
        DGV.AllowUserToAddRows = False

    End Sub

    Private Sub cmd_test_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_test.Click

        For Each P As Persona In Persone
            MessageBox.Show(P.Id & "-" & P.Nome & "-" & P.Cognome)
        Next

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        'Aggiungo una nuova Persona
        Dim Prs As New Persona
        Dim newId As Integer
        For Each P As Persona In Persone
            If P.Id >= newId Then newId = P.Id + 1
        Next
        Prs.Id = newId
        Prs.Nome = "Nome_" & newId
        Prs.Cognome = "Cognome_" & newId
        Persone.Add(Prs)

        personeBS.ResetBindings(False)

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        'Modifico l'ultima Persona
        If Persone.Count > 0 Then

            Persone.Last.Nome &= "_mod"
            Persone.Last.Cognome &= "_mod"

            personeBS.ResetBindings(False)

        End If

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        'Elimino l'ultima Persona
        If Persone.Count > 0 Then

            Persone.RemoveAt(Persone.Count - 1)

            personeBS.ResetBindings(False)

        End If

    End Sub

End Class

Dove :
--> cmd_test esegue un semplice ciclo di verifica sullo stato dell'Insieme Persone.
--> Button2, Button3, Button4 eseguono operazioni di esempio per aggiunta / modifica / rimozione...

Considerazioni :

--> Le operazioni da codice che includono modifiche, come si può vedere, non fanno MAI riferimento diretto a celle o eventi del DGV, ma all'insieme Persone.
Una modifica qualsiasi da codice, inlcudendo sempre come ultima istruzione il ResetBindings sul BindingSource, ha anche l'effetto di aggiornare il DGV.

--> Le operazioni manuali di modifica sul DGV vengono propagate, senza bisogno di gestire alcun codice aggiuntivo o evento che sia, anche all'insieme Persone. Si possono modificare le celle che lo consentono, e questo si ripercuote nella rispettiva proprietà dell'Oggetto corrispondente, o anche selezionare una riga intera ed eliminarla, e verrà eliminato l'Oggetto dall'insieme.

+ Fine Articolo.

Un Click su "Mi Piace" è il modo migliore per ringraziare l'autore di questo articolo.



0 commenti:

Posta un commento

 
Design by Free WordPress Themes Modificato da MarcoGG