Paginare una Grid View da codice.

martedì 25 dicembre 2007 - 09.21

tempista Profilo | Newbie

Buongioeno sto cercando di migrare da Classic Asp ad Asp.Net con C# ed ho il seguente problema, cioè non riesco a paginare se clicco sui numerini per passare alla pagina successiva ricevo un errore :

'System.EventArgs' non contiene una definizione per 'NewPageIndex'.



<%@ Page Language="C#" AutoEventWireup="true" CodeFile="clienti.aspx.cs" Inherits="clienti" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Clienti</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
</asp:GridView>
</form>
</body>
</html>


_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _


using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class clienti : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{


string strConnection = ConfigurationManager.ConnectionStrings["connessione"].ConnectionString;
DataTable tabella = new DataTable();

OleDbDataAdapter adapter = new OleDbDataAdapter("select * from [Dettagli ordini]", strConnection);
adapter.Fill(tabella);

GridView1.DataSource = tabella;
GridView1.AllowPaging = true;
GridView1.AllowSorting = true;
GridView1.PageSize = 5;
GridView1.AlternatingRowStyle.BackColor = System.Drawing.Color.Bisque;
GridView1.DataBind();

}

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
}



Anticipatamente grazie, e Buon Natale a TUTTI!!!!! ;-)

freeteo Profilo | Guru

ciao,
forse ti sei sbagliato con gli eventi, quello che serve a te è "PageIndexChanging" :

protected void grid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{

dove hai e.NewPageIndex dato che "e" è di tipo GridViewPageEventArgs...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

tempista Profilo | Newbie

Ciao Matteo e grazie per la risposta, gentilissimo.
Ho seguito i tuo consiglio ma ricevo ugualmente l'errore è ovvio che sbaglio ancora qualcosa..

In ogni modo ho provato ad aggungere "GridView1.EnableSortingAndPagingCallbacks = true;" e tutto funziona.
Ma che differenza c'è fra come mi hai indicato tu e il codice che sto utilizzando adesso?

Sto cercando mi grare ma, non è semplice... Con Classic Asp era veramente facile fare cose.. sigh sigh...

Anticipatamente grazie.


using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class clienti : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string strConnection = ConfigurationManager.ConnectionStrings["connessione"].ConnectionString;
OleDbDataAdapter adapter = new OleDbDataAdapter("select * from [Dettagli_ordini]", strConnection);
DataTable tabella = new DataTable();
adapter.Fill(tabella);
GridView1.DataSource = tabella;
GridView1.AllowPaging = true;
GridView1.PageSize = 10;
GridView1.EnableSortingAndPagingCallbacks = true;
GridView1.AlternatingRowStyle.BackColor = System.Drawing.Color.Bisque;
GridView1.AutoGenerateColumns = true;
GridView1.DataBind();
}
}

freeteo Profilo | Guru

ciao,
quello che pensavo io era che tu volessi gestirti l'evento di cambio pagina per qualche motivo tuo.
Usando "EnableSortingAndPagingCallbacks" praticamente la griglia renderizza uno script lato client che richiama il Load della pagina e poi fa fare tutto "dietro alle quinte" la pagina, o l'ordinamento.
Diciamo che sarebbe una sorta di "updatePanel" di ajax, gia' presente di default nelle griglie, che come tutti sanno hanno da sempre, problemi (soprattutto nel web) di visualizzazione di grosse masse di dati.
Il tutto succede senza mettere questa proprieta', se hai una DataSource agganciata alla griglia (tramite proprieta' DataSourceID)

Quindi il tuo processo non è sbagliato, ti semplifica la vita per il fatto di avere tutto gia' fatto e per moli non troppo consistenti di dati è la scelta piu' giusta....il problema è nei grandi numeri, nel senso che la paginazione della griglia in automatico (con o senza datasourceId diciamo) è fatta dopo che cmq sul server ha fatto la query per tutti i dati.
Il fatto va valutato sul campo, se i tempi sono accettabili, è giusto cosi', altrimenti devi controllare "IsPostBack" nel load, e farti il caricamento della fascia di record che ti servono nell'evento "PAgeIndexChanged" e "sorting", in modo da fare una query "mirata"...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

tempista Profilo | Newbie

Ciao Freeteo,
più esauriente di così, non potevi essere... Grazie infinite, tutto chiaro!
Diciamo che mi piacerebbe poter gestire il tutto da codice, perchè non mi piacciono le procedure automatiche di Visual Studio.
Stavo cercando di costruire una paginazione come si faceva in asp passando i parametri tramite QueryString.
Dove posso trovare un esempio di paginazione da codice con Paginazione e Ordinamento?

Buona serata,


freeteo Profilo | Guru

ciao,
paginazioni gia' fatte non ne conosco, io mi ero implementato al tempo una bella query cge faceva da sola la "finestra di dati", pero' era alquanto incasinata, e adesso con sql 2005 che ha il "ROW_NUMBER" diventa piu' semplice da fare.
Dipende quindi dal tuo db, non ti resta che cercare in internet, ci sono degli esempi tipo questi:
http://weblogs.asp.net/scottgu/archive/2006/01/01/434314.aspx
http://www.oracle.com/technology/oramag/oracle/07-jan/o17asktom.html

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

tempista Profilo | Newbie

Ricevuto, grazie!!!

freeteo Profilo | Guru

ok perfetto!
ma hai risolto? se si accetta una risposta cosi' chiudiamo il thread.
Grazie

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

tempista Profilo | Newbie

Si, nel senso che ho appreso i concetti e conosciuto i miei limiti, pertanto ho contattato un professionista per delle lezioni... Ha ha ha ha ha ha
Grazie ancora, sei un MAGO!!!

freeteo Profilo | Guru

>Si, nel senso che ho appreso i concetti e conosciuto i miei limiti,
>pertanto ho contattato un rofessionista per delle lezioni...
>Ha ha ha ha ha ha
ROTFL


>Grazie ancora, sei un MAGO!!!
ahahah grazie

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5