Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Data-binding di una collezione generica a una DataGridView con Visual Basic 2008

L’antefatto di questo post è che avevo necessità di collegare tramite data-binding, in un'applicazione scritta in Visual Basic 2008, una DataGridView a una collection generica di classi personalizzate. Il fine da raggiungere è quello che, all’aggiunta, modifica o eliminazione di elementi all’interno della DataGridView, venisse automaticamente aggiornata la mia collection e viceversa.

.NET Framework mette a disposizione un oggetto molto comodo, che è il BindingSource. Questo può essere utilizzato anche da designer, ma in questo caso non permette di collegare oggetti che non abbiano la definizione di una classe. Nel mio caso, devo istanziare una collection all’interno di un modulo e questo scenario non è realizzabile utilizzando il BindingSource a design-time, mentre lo è scrivendo apposito codice.

Dunque ipotizziamo di avere la solita classe didattica Person:

Public Class Person

    Private _lastName As String

    Private _name As String

 

    Public Property LastName() As String

        Get

            Return _lastName

        End Get

        Set(ByVal value As String)

            _lastName = value

        End Set

    End Property

 

    Public Property Name() As String

        Get

            Return _name

        End Get

        Set(ByVal value As String)

            _name = value

        End Set

    End Property

 

    Public Sub New()

 

    End Sub

 

    Public Sub New(ByVal name As String, ByVal lastName As String)

        _name = name

        _lastName = lastName

    End Sub

End Class

Supponiamo, poi, di istanziare una collection di oggetti Person. Nel mio caso avviene in un modulo, ma può avvenire, ad esempio, nella Sub Main di un’applicazione Console. Questo è il codice di istanza:

    Dim People As New List(Of Person)

 

Il passaggio successive è quello di istanziare un oggetto BindingSource, per poi assegnare la sua proprietà DataSource con la collection di cui sopra:

    Dim PeopleBindingSource As New BindingSource

    PeopleBindingSource.DataSource = People

Nella finestra che contiene la DataGridView, si assegna la proprietà DataSource di quest’ultimo controllo:

    PeopleDataGridView.DataSource = PeopleBindingSource

 

Il data-binding eseguito in questo modo permette di aggiornare contemporaneamente DataGridView e collection, qualunque dei due sia l’oggetto sul quale si interviene. Inoltre, nella fattispecie presa in considerazione, se la proprietà AutoGenerateColumns della DataGridView è impostata su True, .NET genera automaticamente tante colonne quante sono le proprietà della classe collegata (in questo caso due colonne, Name e LastName). Ovviamente se si usa codice come quello sopra esposto, non è necessario impostare alcuna proprietà di data-binding a design-time.

Spero che vi sia utile perché su Internet ho trovato solo il data-binding di una collection ma senza possibilità di modificare i dati, cosa che invece era a me necessaria.

Alessandro

Print | posted on sabato 15 marzo 2008 17:40 | Filed Under [ Visual Basic ]

Powered by:
Powered By Subtext Powered By ASP.NET