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 ClassDove :
--> 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.



13:05
MarcoGG

Posted in:
0 commenti:
Posta un commento