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

LINQ: Binding di un documento XML a un controllo DataGridView

Il risultato di una query LINQ, qualunque sia il tipo restituito (ad es. IQueryable, IEnumerable, IOrderedEnumerable) espone un metodo extension chiamato ToList, che converte il risultato stesso della query in una collection generica di tipo List (Of T).

Questo metodo può essere sfruttato, ad esempio, per il binding del risultato di una query a un controllo DataGridView. In questo post vedremo come collegare il risultato di una query eseguito su un documento XML a una DataGridView. Quindi, ipotizziamo di avere una semplice applicazione Windows Forms su cui siano presenti un controllo DataGridView e un BindingNavigator, per sfogliare i dati.

La base è costituita dal seguente, semplice documento XML contenente una lista di contatti:

<?xml version="1.0" encoding="utf-8" ?>

<Contatti>

  <Contatto Nome="Alessandro" Città="Cremona"/>

  <Contatto Nome="Diego" Città="Trieste"/>

  <Contatto Nome="Antonio" Città="Milano"/>

  <Contatto Nome="Mario" Città="Belluno"/>

  <Contatto Nome="Gianluca" Città="Firenze"/>

</Contatti>

Da questa lista vogliamo estrarre entrambe le proprietà (gli attributi nel file XML) Nome e Città, ordinando il risultato in base al nome:

        Dim doc As XDocument = XDocument.Load("XmlFile.xml")

 

        Dim risultato = From contatto In doc...<Contatti>.<Contatto> _

                      Select Nome = contatto.@Nome, Città = contatto.@Città _

                      Order By Nome

Notate, nella query, l'assegnazione "al volo" dei valori estratti dal documento XML a dei nuovi campi. Il risultato della query viene assegnato a una collection IOrderedEnumerable di anonymous types dei quali, anche in questo caso, si dovrebbe capire l'utilità.

Collegare il risultato della query a una DataGridView già implementata è molto semplice:

        Dim binding As New BindingSource

        binding.DataSource = risultato.ToList 'Utilizzo del metodo extension ToList

 

        DataGridView1.DataSource = binding

        BindingNavigator1.BindingSource = binding

Si tratta chiaramente di un esempio didattico, essendo in sola lettura, che però può dare l’idea di come collegare dati XML ai classici controlli utilizzando LINQ. Se avviate l'applicazione otterrete l'elenco dei contatti mostrato in una DataGridView, sfogliabile attraverso i comandi del BindingNavigator.

Alessandro

Print | posted on giovedì 3 aprile 2008 02:27 | Filed Under [ Visual Basic LINQ ]

Powered by:
Powered By Subtext Powered By ASP.NET