Paging datagrid

lunedì 25 settembre 2006 - 10.16

realbenny23 Profilo | Junior Member

ciao, da codice c# creo una datagrid e vorrei aggiungere il paging, solo che non riesco, qualcuno mi può aiutare? vorrei fare tutto da codice, senza usare html.
Riporto parte del codice.

DataGrid ItemsGrid = new DataGrid();

private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
if(!IsPostBack)
{
CreaDataGrid();
ItemsGrid.DataSource = CreateDataSource();
ItemsGrid.DataBind();
}
else
ItemsGrid.PageIndexChanged += new DataGridPageChangedEventHandler(this.Grid_Change);
}

void Grid_Change(Object sender, DataGridPageChangedEventArgs e)
{
//Setto l'indice della pagina corrente al click dell'utente
ItemsGrid.CurrentPageIndex = e.NewPageIndex;
//Ricarico la datagrid
ItemsGrid.DataSource = CreateDataSource();
ItemsGrid.DataBind();

}
Benny

alx_81 Profilo | Guru

>ciao,
Ciao!

>da codice c# creo una datagrid e vorrei aggiungere il paging,
>solo che non riesco, qualcuno mi può aiutare?

Dovresti prima dirmi come crei il datagrid e cosa intendi per "non riesco" .. mi spiego..
- non viene fuori il pager?
- se cambi pagina non succede nulla?
- se cambi pagina vedi una pagina bianca?
..
fammi sapere!!
ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

realbenny23 Profilo | Junior Member

queste sono le due funzioni dove creo il datagrid e poi lo popolo. quando clicco per andare alla pagina successiva mi compare una pagina bianca. poi dovrei anche fare il sort

void CreaDataGrid()
{
//Setto alcune proprietà della datagrid
//Inserisco il nome del datagrid
ItemsGrid.ID = "ItemsGrid";
//Inserisco il colore del bordo della datagrid
ItemsGrid.BorderColor = System.Drawing.Color.Black;
//Specifico la distanza (in pixel) tra una cella e l’altra, oppure tra una cella e il bordo
ItemsGrid.CellPadding = 3;
//Metto a false la generazione automatica delle colonne
ItemsGrid.AutoGenerateColumns = false;
//Metto a true allowpaging per permettere l'impaginazione
ItemsGrid.AllowPaging=true;
//Setto a 10 gli elementi da visualizzare in ogni pagina
ItemsGrid.PageSize=10;

//Specifico il colore di intestazione delle colonne
ItemsGrid.HeaderStyle.BackColor = System.Drawing.Color.FromArgb(0x0000aaaa);

//Aggiungo al controllo Datagrid le colonne, specificando il nome e il tipo
//Creo una colonna di nome "Item" e di tipo "Numero Intero"
ItemsGrid.Columns.Add(CreateBoundColumn("IntegerValue", "Item"));
//Creo una colonna di nome "Description" e di tipo "Stringa"
ItemsGrid.Columns.Add(CreateBoundColumn("StringValue", "Description"));
//Creo una colonna di nome "Price" e di tipo "Valuta" e l'allineamento dei valori a dx
ItemsGrid.Columns.Add(CreateBoundColumn("CurrencyValue", "Price", "{0:c}", HorizontalAlign.Right));
//Creo una colonna di nome "Microsoft", inserisci direttamente il link url e che si deve
//aprire nella stessa pagina e la descrizione del link "Related link"
ItemsGrid.Columns.Add(CreateLinkColumn("http://www.microsoft.com", "_self", "Microsoft", "Related link"));

//Specifico il datasource ed eseguo il binf del controllo stesso
//ItemsGrid.DataSource = CreateDataSource();
//ItemsGrid.DataBind();
//Aggiungo il controllo DataGrid al controllo PlaceHolder
Place.Controls.Add(ItemsGrid);

}

//Questa funzione popola un dataview con dei valori che verranno aggiunti al datagrid e visualizzati
ICollection CreateDataSource()
{

Random Rand_Num = new Random();
//Creo un datatable per il controllo DataGrid
DataTable dt = new DataTable();
DataRow dr;

//Definisco le colonne del datatable e il tipo
//Aggiungo una colonna di nome "IntegerValue" di tipo "Intero a 32 bit"
dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
//Aggiungo una colonna di nome "StringValue" di tipo "Stringa"
dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
//Aggiungo una colonna di nome "CurrencyValue" di tipo "Numero in precisione doppia"
dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));

//Popolo il datatable con dei valori di esempio, ripetendo l'operazione 10 volte usando il ciclo for
for (int i = 0; i < 20; i++)
{
//Istanzio una riga per il datatable
dr = dt.NewRow();
//Alla riga creata alla colonna 0 aggiungo il valore i (i viene incrementato tramite il ciclo for)
dr[0] = i;
//Alla riga creata alla colonna 1 compongo la stringa da inserire formata dalla parola "Item" e
//il numero i trasformato in stringa (i viene incrementato tramite il ciclo for)
dr[1] = "Item " + i;//Rand_Num.Next(1, 15).ToString();
//Alla riga creata alla colonna 2 creo un valore tramite una moltipliazione tra 1.23 e il valore i+1
//(i viene incrementato tramite il ciclo for)
dr[2] = 1.23 * Rand_Num.Next(1, 15);
//La riga creata la aggiungo al datatable
dt.Rows.Add(dr);
}
Session["Source"] = dt;
//Istanzio un dataview popolato con i valori del datatable
DataView dv = new DataView(dt);
//La funzione a questo punto ritorna il dataview
return dv;
}
Benny

alx_81 Profilo | Guru

è tutto corretto tranne la creazione del gestore dell'evento.. tu lo fai alla load.
Invece devi farlo nell'evento init del datagrid.
Quindi devi scrivere un metodo

void ItemsGrid_Init(Object sender, System.EventArgs e) { ItemsGrid.PageIndexChanged += ChangePage }

a sua volta, questo metodo, è gestito nel CreateDataGrid()
ovvero...

private void CreateDataGrid() { //Setto alcune proprietà della datagrid //Inserisco il nome del datagrid ItemsGrid.ID = "ItemsGrid"; ... ItemsGrid.Init += ItemsGrid_Init; }

ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

rcafiero Profilo | Newbie

io ho lo stesso problema. Ho un datagrid costruito dimìnamicamente e paginato. Ho seguito alla lettera i suggerimenti, il gestore delle evento di cambio pagina viene impostato nella Init del DataGrid. Ma, quando cambio pagina mi viene una pagina bianca. Se invece imposto AutoGenerateColumns=true la paginazione funziona. Ma non voglio usare AutoGenerateColumns=true perch mi dà problemi con la visualizzazione del Pager su .NET 2.0. Avete una idea di quale potrebbe essere la causa del problema?
Grazie
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5