Home Page Home Page Articoli Paginare un Datalist utilizzando il metodo ReadXml della classe Dataset

Paginare un Datalist utilizzando il metodo ReadXml della classe Dataset

Il controllo DataGrid è uno strumento molto completo, ma che a volte può risultare troppo complesso in base alle esigenze della nostra applicazione. In questo articolo verrà spiegato come utilizzare al massimo il controllo DataList, anch'esso ottimo visualizzatore di dati, utilizzando però un'origine dati in formato XML, implementandone la paginazione.
Autore: Matteo Raumer Livello:
Quando si vogliono paginare i dati da visualizzare in un datalist (con il datagrid il problema non sussiste dato che è gia predisposto) si può utilizzare il metodo Fill del (Oledb/SQL)DataAdapter specificando il range, ma se non si dispone (come un file xml) di una sorgente di dati che permette l'uso di un dataadapter non si puo optare per questa soluzione.
Il framework ci viene incontro ugualmente infatti,ci si può affidare al metodo ReadXml offerto dalla classe dataset per accedere direttamente ad un file xml (ovvero a qualsiasi fonte xml valida come webservice etc....) dove sono salvati i dati.
Il problema è che l'struzione legge tutti i dati e non si puo paginare in fase di lettura ma si deve ricorrere a qualche trucchetto.

Prepariamo una pagina con un dropdownlist dove scelgo quanti per record pagina, un datalist e degli hyperlink che mi servono per la navigazione tra le pagine. Quindi per prima cosa leggiamo il file :


Dim ds As New System.Data.DataSet
ds.ReadXml(Server.MapPath("miofile.xml"))


a questo punto il dataset contiene tutti i record e dobbiamo decidere quali visualizzare.Ci dobbiamo affidare al qualche parametro che leggeremo dalla querystring (num=numero di righe per pagina , pag=numero di pagina da visualizzare) che mi indichi cosa mostrare, parametri che man mano che clicchiamo sui link "Avanti" e "Indietro" serviranno. Inoltre leggiamo il numero di righe che serve per visualizzare o meno il pulsante avanti (caso in cui visualizzo l'ultima pagina)


Dim zNumero As Int16 = Request.QueryString("num")
Dim zPag As Int16 = Request.QueryString("pag")
Dim zRecords As Int16 = ds.Tables(0).Rows.Count

If zNumero <> 0 Then
linkAvanti.NavigateUrl = Request.Url.LocalPath & "?num=" & zNumero & "&pag=" & zPag + 1
linkAvanti.Visible = (zRecords - 1) >= (zPag + 1) * zNumero
LinkIndietro.NavigateUrl = Request.Url.LocalPath & "?num=" & zNumero & "&pag=" & zPag - 1
LinkIndietro.Visible = zPag <> 0
Else
linkAvanti.Visible = False
LinkIndietro.Visible = False
End If


A questo punto loopiamo aggiungendo ad un arraylist le righe che ci soddisfano (controllando con [If i <= zRecords - 1] che non siano finite)


Dim arr As New ArrayList
For i As Integer = zPag * zNumero To zPag * zNumero + zNumero - 1
If i <= zRecords - 1 Then arr.Add(ds.Tables(0).Rows(i))
Next


infine agganciamo il datasource al mio datalist


DataList1.DataSource = arr
DataList1.DataBind()


Il progetto in esecuzione
Il progetto in esecuzione


Tutta questa parte di codice puo essere inserita nella funzione page_load controllando il postback mentre per quanto riguarda la parte Html della pagina all'interno del tag <ItemTemplate> del datalist devo usare il tag speciale <%# DataBinder.Eval(Container, "DataItem(2)") %> che come si nota subito non va per nome del campo da visualizzare ma per indice, cosa che si rende necessaria perche il datasource è un arraylist e non un datatable/dataset/dataview ai quali si può accedere tramite nome.

Pro:
- La comodità che con un semplice copia incolla si distribuisce la pagina e il relativo file da leggere indipendentemente dalla locazione senza preoccuparsi connessioni a database (e magari tramite un'altra pagina scrivere con il duale WriteXml )
- Si ottiene lo stesso risultato pur non disponendo di un metodo gajardo come fill del dataadapter

Contro:
- Il file viene letto interamente anche per visualizzare solo determinati record percui si deve stare attenti alle dimensioni del file stesso
- Si utilizza un oggetto arraylist "contenitore" delle righe e datasource del datalist, percui nella parte html della pagina si deve andare per indice e non per nome del campo
Voto medio articolo: 4.0 Numero Voti: 2

File allegati


89_xmldatalist.zip (1 Kbyte)
Matteo Raumer

Matteo Raumer

Laurea breve in Ingegneria Elettronica presso l'Universita di Padova nel 2001, e nel febbraio 2009 un'altra triennale in Ingegneria Informatica. Da anni lavoro come programmatore .NET principalmente in C#, per migrare applicativi win32 in applicazioni ASP.NET. Ho sviluppato inoltre parecchia reportistica su Crystal Re... Profilo completo

Articoli collegati

Utilizzare controlli lato server in un Datagrid
Il DataGrid è un controllo molto avanzato spesso usato in ASP.NET. La maggior parte degli sviluppatori utilizza le funzioni basilari. E' possibile però estenderlo utilizzando controlli server aggiuntivi all'interno delle celle. Vediamo un esempio con una Combo Box.
Autore: Luca Graziani | Difficoltà: | Commenti: 6 | Voto:
Utilizzare il Tracing in ASP.NET
Scopriamo in questo articolo il servizio di analisi di ASP.NET che permette di controllare e analizzare le richieste web, consentendo di scrivere nel log del servizio di analisi in modo da effettuare a runtime una sorta di debug dell'applicazione Web.
Autore: Marco Caruso | Difficoltà: | Commenti: 1 | Voto:
Spedire messaggi SMS con .NET
Spiegheremo in questo articolo alcune tecniche per inviare messaggi SMS tramite .NET: invio tramite Web Service, invio diretto tramite cellulare oppure invio tramite un SMS Gateway. Presente anche un esempio pratico di invio con ASP.NET e Web Service.
Autore: David De Giacomi | Difficoltà: | Commenti: 9
Utilizzare il Web Service dei SQL Reporting Services da una pagina ASP.NET
Vedremo in questo articolo un altro modo di utilizzo dei Reporting Services. Mostreremo infatti come consumare il Web Service offerto dai RS per esportare i Reports in vari formati (XML, Excel, PDF, HTML, CSV) e visualizzarli in una pagina ASP.NET.
Autore: Marco Caruso | Difficoltà: | Commenti: 1 | Voto:
Visualizzare gerarchicamente i dati con una speciale DataGrid
La rappresentazione grafica di dati gerarchicamente connessi tra loro può essere realizzata anche con l'ausilio di un free control, creato da Denis Bauer, ottenendo un risultato veramente ottimo sia dal punto di vista grafico sia da quello funzionale.
Autore: Andrea Bersi | Difficoltà: | Commenti: 1 | Voto:
Mobile Web Forms e compatibilità tra Device
Ecco un articolo che illustra la creazione di una pagina mobile, tenendo conto delle compatibilità tra vari Device mobili.
Autore: Giovanni Ferron | Difficoltà:
DataSet, CreateChildView, e DataRelation: usare DataGrid per visualizzare dati da 2 tabelle
Un semplice e chiaro esempio per sfruttare al meglio il controllo DataGrid, per la visualizzazione di dati provenienti da 2 tabelle diverse, ma collegate fra loro. Viene spiegato come utilizzare il DataSet per creare delle relazioni tra le tabelle in esso contenute.
Autore: Andrea Bersi | Difficoltà: | Commenti: 1 | Voto:
Caching di pagine ASP.NET
Quando si ha a che fare con l'ingegnerizzazione di un programma la gestione del cache è una cosa importante. La "cache" e' un'area molto veloce (di solito la RAM) dove vengono copiati i dati che necessitano di essere disponibili nel piu breve tempo possibile. Vediamo com'è possibile gestire la Cache in ASP.NET
Autore: Matteo Raumer | Difficoltà:
Come paginare un DataList
In questo articolo viene spiegato come paginare un DataList, grazie all'aiuto di stored procedure e al supporto per il paging offerto dal controllo stesso. Per ottenere una paginazione veloce, leggera, e personalizzabile al massimo.
Autore: Loris Badii | Difficoltà: | Commenti: 2 | Voto:
Ridimensionare al volo le immagini uploadate sul server, per creare le ThumbnailImages.
Molto spesso ci capita di voler visualizzare un'anteprima di un'immagine che magari ha grosse dimensioni. In questo articolo verrà spiegato come creare le immagini ridimensionate senza perdita di qualità.
Autore: Valerio Fornito | Difficoltà: | Commenti: 6
Renderizzare automaticamente gli URL come links in formato HTML
Molto spesso ci capita di dover visualizzare nelle pagina web degli URL, letti magari dal DB, ma che non ci vengono visualizzati subito come link cliccabili dall'utente. In questo articolo verrà spiegato come automatizzare questo processo.
Autore: Valerio Fornito | Difficoltà: | Voto:
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5