Home Page Home Page Tips & Tricks Come utilizzare il controllo XmlDataSource in ASP.NET 2.0

Come utilizzare il controllo XmlDataSource in ASP.NET 2.0


In ASP.NET 1.x per potere utilizzare come fonte dati un file XML per sfruttare il binding con un DataGrid o un DataList dovevamo per forza usare un DataSet che ha il metodo ReadXml.

Codice .NET n°1
DataSet ds = new DataSet();
Datagrid1.DataSource = ds.ReadXml(“filetest.xml”);
Datagrid.DataBind();


Ora in ASP.NET 2.0 è stato introdotto un nuovo oggetto XmlDataSource che permette di usare il binding tra un file XML ed un controllo che ha questa proprietà.

Per poter utilizzare questo nuovo controllo è importante la struttura del file XML, per ogni nodo(che sarà il nostro record) bisogna creare tanti attributi quante sono le colonne che si vogliono utilizzare, per esempio:

Codice .NET n°2
<?xml version="1.0" standalone="yes"?>
<listapc>
<pc id="1" produttore="Dell" tipologia="notebook/desktop" vendita="on-line"></pc>
<pc id="2" produttore="HP" tipologia="notebook/desktop" vendita="on-line/negozio"></pc>
<pc id="3" produttore="Toshiba" tipologia="notebook" vendita="on-line/negozio"></pc>
</listapc>


Mentre questo file non è utilizzabile:

Codice .NET n°3
<?xml version="1.0" encoding="UTF-8"?>
<listapc>
<pc>
<id>1</id>
<produttore>Dell</produttore>
<tipologia>notebook/desktop</tipologia>
<vendita>on-line</vendita>
</pc>
</listapc>


Questo secondo file XML anche se well-formed per il controllo XmlDataSource non è utilizzabile perchè, è come se fossero 4 record, ed infatti se provate ad associare questo file ad una GridView (la nuova DataGrid di ASP.NET 2.0) otterrete questo errore:

The data source for GridView with id 'GridView1' did not have any properties or attributes from which to generate columns. Ensure that your data source has content.

Fatte queste premesse vediamo come funziona questo nuovo controllo.
Come prima cosa si deve creare un file XML simile a quello precedentemente visualizzato e lo inseriamo nella nuova cartella App_Data che è quella predisposta a contenere i dati e dove ci sono impostati correttamente i permessi lettura e scrittura.
Poi si deve creare una nuova Web Form, tramite il drag&drop trasciniamo sulla webform il nuovo oggetto XmlDataSource e poi clicchiamo su "Configure Data Source" e dovreste trovarvi ad una situazione simile:



Come si può notare ci sono tre proprietà:

1. Data File che il path del file XML.
2. Transform file che permette di selezionare un file XSL per la trasformazione.
3. XPath expression che permette di inserire una espressione XPATH per filtrare i dati.

Dopo aver scelto il file, sempre tramite il drag&drop inserite, una GridView e selezionate come DataSource iil controllo precedentemente inserito ed in automatico vengono create le colonne.
Quindi sulla pagina aspx dovreste avere, un struttura simile:

Codice .NET n°4
<div>
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/App_Data/test2.xml">
</asp:XmlDataSource>

</div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="XmlDataSource1">
<Columns>
<asp:BoundField DataField="id" HeaderText="id" SortExpression="id" />
<asp:BoundField DataField="produttore" HeaderText="produttore" SortExpression="produttore" />
<asp:BoundField DataField="tipologia" HeaderText="tipologia" SortExpression="tipologia" />
<asp:BoundField DataField="vendita" HeaderText="vendita" SortExpression="vendita" />
</Columns>
</asp:GridView>


Per capire come funziona la proprietà XPATH Expression, abilitiamo la selezione nella GridView e come datakey associamo l'attributo id e gestiamo l'evento SelectedIndexChanged della GridView.
Nella pagina aspx aggiungiamo le due proprietà:

Codice .NET n°5
OnSelectedIndexChanged="GridView1_SelectedIndexChanged"
DataKeyNames="id"


Poi lato codice creaiamo il gesture dell'evento SelectedIndexChanged:

Codice .NET n°6
protected void GridView1_SelectedIndexChanged(object sender, 
EventArgs e)
{
string id = (string)GridView1.DataKeys[GridView1.SelectedIndex].Value;
XmlDataSource1.XPath = string.Format("//*[@id='{0}']", id);
}


Recuperiamo l'ID selezionato e lo passiamo alla query XPATH che recupera tutti i nodi che hanno l'attributo selezionato.
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5