Salve ragazzi,
ho un problema sulla paginazione di un datalist.
Praticamente quando mi trovo all'inizio o alla fine dei record per andare rispettivamente avanti e indietro al primo clic mi viene ricaricata la pagina e basta mentre poi facendo un secondo clic sulle freccette passo al record successivo o precedente.
Nella navigazione dei record intermedi non ho nessun problema al primo clic visualizzo la pagina successiva o precedente.
Vi posto il codice perchè non riescoe a capire il problema:
codice:
<!DOCTYPE html>
<%@ Page Language="C#"%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script language="c#" runat="server">
void Page_Load(Object sender, EventArgs e){
String ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
Server.MapPath("database/xxxxx.mdb");
OleDbConnection cn = new OleDbConnection(ConnString);
//Apro la connessione;
cn.Open();
//Data adapter
OleDbDataAdapter objAdapter = new OleDbDataAdapter("SELECT * FROM News", cn);
//Creo il dataset per la tabella news sulla sx
DataSet ds = new DataSet();
//Creo il dataset per la tabella sezione news
DataSet dsTbNews = new DataSet();
//Lo riempio
//Calcolo i record da estrarre e riempio il dataset
int startRecord = (int.Parse(Pagina.Value)-1)*int.Parse(Record_Max.Value);
objAdapter.Fill(ds, startRecord, int.Parse(Record_Max.Value), "News");
//Lo riempio
//Calcolo i record da estrarre e riempio il dataset della tabella sezione News
int startRecordTbNews = (int.Parse(PaginaTbNews.Value)-1)*int.Parse(Record_MaxTbNews.Value);
objAdapter.Fill(dsTbNews, startRecordTbNews, int.Parse(Record_MaxTbNews.Value), "News");
Grid.DataSource = ds.Tables[0].DefaultView;
Grid.DataBind();
GridTbNews.DataSource = dsTbNews.Tables[0].DefaultView;
GridTbNews.DataBind();
cn.Close();
//Conta i numero di record Totali
OleDbCommand myCmd = new OleDbCommand("SELECT Count(*) FROM News", cn);
cn.Open();
Record_Tot.Value = myCmd.ExecuteScalar().ToString();
Record_TotTbNews.Value = myCmd.ExecuteScalar().ToString();
cn.Close();
Grid.DataBind();
GridTbNews.DataBind();
//Controllo i Link
if((int.Parse(PaginaTbNews.Value)-1)<=0){
Prev.Enabled = false;
}
else{
Prev.Enabled = true ;
}
if((int.Parse(PaginaTbNews.Value)*int.Parse(Record_MaxTbNews.Value))>=int.Parse(Record_TotTbNews.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(PaginaTbNews.Value)-1)>=0){
PaginaTbNews.Value = (int.Parse(PaginaTbNews.Value)-1).ToString() ;
}
}
else if(((LinkButton)sender).ID=="Next"){
if((int.Parse(PaginaTbNews.Value)*int.Parse(Record_MaxTbNews.Value))<int.Parse(Record_TotTbNews.Value)){
PaginaTbNews.Value = (int.Parse(PaginaTbNews.Value)+1).ToString() ;
}
}
}
</script>
Questi invece sono i due datalist.
Il primo ha un'elenco limitato a tre news ma senza paginazione.
Il secondo ha sempre un'elenco di tre news ma con la paginazione.
codice:
<input type="hidden" id="Record_Max" value="3" 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" CellPadding="0" RepeatLayout="Flow">
<ItemTemplate>
"><%#DataBinder.Eval(Container.DataItem,"Titolo") %>
</ItemTemplate>
</ASP:DataList>
Il secondo
codice:
<input type="hidden" id="Record_MaxTbNews" value="2" runat="server">
<input type="hidden" id="PaginaTbNews" value="1" runat="server">
<input type="hidden" id="Record_TotTbNews" runat="server">
<asp:DataList id="GridTbNews" runat="server" CellPadding="0" RepeatLayout="Flow">
<ItemTemplate>
"><%#DataBinder.Eval(Container.DataItem,"Titolo") %>
</ItemTemplate>
</ASP:DataList>
<asp:LinkButton id="Prev" Text="Prec." OnClick="Paginazione" runat="server" Visible="True" />
<asp:LinkButton id="Next" Text="Succ." OnClick="Paginazione" runat="server" Visible="True" />
Da cosa potrebbe dipendere?
Buona giornata.