> > Articoli
Paginare una Query con un DataList
Tramite i DataGrid di ASP.net
la paginazione di un risultato di una query risulta molto semplice e rapido,
se utilizziamo invece un DataList la cosa non é piú
cosí lineare; questo controllo infatti non permette di paginare
automaticamente un RecordSet. Una soluzione potebbe essere selezionare
l'intervallo di record da visualizzare tramite dei comandi SQL
specifici ma la cosa non è possibile con tutti i database in circolazione. Vedremo
ora come poter sorpassare questo limite:
<%@ Import Namespace="System.Data.Odbc"
%>
<%@ Import Namespace="System.Data" %>
<script language="C#" runat="server">
//Estrae i record dal database
public void Seleziona_Record()
{
//Apro la connessione al db, in questo caso
mySQL
OdbcConnection ob = new OdbcConnection("Driver={MySQL};Database=db;UID=user;PWD=pass;");
String sql = "select * from TABELLA";
OdbcDataAdapter Com = new OdbcDataAdapter(sql,ob);
DataSet ds = new DataSet();
//Calcolo i record da estrarre e riempio
il dataset
int startRecord = (int.Parse(Pagina.Value)-1)*int.Parse(Record_Max.Value);
Com.Fill(ds, startRecord, int.Parse(Record_Max.Value), "Tabella");
Grid.DataSource = ds.Tables[0];
Grid.DataBind();
//Conta i numero di record Totali
OdbcCommand myCmd = new OdbcCommand("SELECT Count(*) FROM PAGINE", ob);
ob.Open();
Record_Tot.Value = myCmd.ExecuteScalar().ToString();
ob.Close();
//Controllo i Link
if((int.Parse(Pagina.Value)-1)<=0){
Prev.Enabled = false;
}
else{
Prev.Enabled = true ;
}
if((int.Parse(Pagina.Value)*int.Parse(Record_Max.Value))>=int.Parse(Record_Tot.Value))
Next.Enabled = false;
else
Next.Enabled = true ;
}
//Controlla che link ha sollevato l'evento
e aumenta o diminuisce la pagina corrente
public void Paginazione(object sender, EventArgs e){
if(((LinkButton)sender).ID=="Prev"){
if((int.Parse(Pagina.Value)-1)>=0){
Pagina.Value = (int.Parse(Pagina.Value)-1).ToString() ;
}
}
else if(((LinkButton)sender).ID=="Next"){
if((int.Parse(Pagina.Value)*int.Parse(Record_Max.Value))<int.Parse(Record_Tot.Value)){
Pagina.Value = (int.Parse(Pagina.Value)+1).ToString() ;
}
}
Seleziona_Record();
}
//Controlla se é la prima volta che
la pagina viene visualizzata e in caso affermativo stampa
//la prima pagina
void Page_Load(Object sender, EventArgs e){
if(!IsPostBack)
Seleziona_Record();
}
</script>
<html>
<body>
<p align=center><b>Prova di Paginazione</b></p>
<center>
<form runat="server">
<input type="hidden" id="Record_Max" value="4"
runat="server">
<input type="hidden" id="Pagina" value="1"
runat="server">
<input type="hidden" id="Record_Tot" runat="server">
<asp:DataList id="Grid" runat="server" repeatlayout="table"
DataKeyField="ID">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "ID") %> -
<%#DataBinder.Eval(Container.DataItem,"PAGINA")
%><br>
</ItemTemplate>
</ASP:DataList>
<asp:LinkButton id="Prev" Text="<< Prev"
OnClick="Paginazione" runat="server" />
<asp:LinkButton id="Next" Text="Next >>"
OnClick="Paginazione" runat="server" />
</form>
</body>
</html>
Analizziamo ora ogni funzione della
pagina, per prima cosa notiamo i 3 controlli HTML di tipo Hidden che useremo
come variabili globali e che conterranno rispettivamente il numero di
record visualizzati per pagina, la pagina corrente e i record totali.
Seleziona_Record() instaura la connessione al db che stiamo utilizzando,
in questo caso é mySQL e la connessione avviene tramite ODBC, utilizzando
OleDb non cambierá niente, gli oggetti usati sono praticamente
identici, OdbcConnection sará OleDbConnection e cosí via.
Dopo aver creato la connessione esegue la query di selezione che ci interessa
ed riempie il DataSet che abbiamo creato con i record che compongono
la pagina che dobbiamo visualizzare e abilita o meno i link che ci permettono
di navigare tra le pagine controllando che ci troviamo in prima o ultima
pagina.
Paginazione() viene invocata dai due controlli web di tipo LinkButton
si occupa di riconoscere l'oggetto che l'ha invocata e in base a quest'ultimo
incrementa o diminuisce il valore della pagina corrente.
Page_Load() controlla solo che sia la prima volta che la pagina
viene visualizzata e che non abbiamo giá clikkato su uno dei due
LinkButton e in caso positivo stampa la prima pagina.
 |
Copyright © 2001-2018 ASPCode.it
- Riproduzione vietata - v. 3.0
- Capitani Paolo - P.IVA: 03300740408
- Contact
|
 |