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.
0 commenti:
Posta un commento