Volete sapere quanto sono cotto?, fate un salto quà .
Volevo scrivere come recuperare il VirtualItemCount utilizzando un ControlAdapter, ma vuoi i film scadenti che vedo, il caldo, la voglia di ferie ho fatto un gran casino :D confondento il numero totale delle pagine, facilmente accessibile e il numero totale di item, nascoso nel ViewState come spiega Andrea Boschin
cospargendomi il capo di cenere posto il codice corretto:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.Adapters;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.Adapters;
using System.Reflection;
using System.Collections;
namespace Adapter
{
public class DataGridFx : DataBoundControlAdapter
{
private GridView control = null;
private Control controlPager = null;
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
control = this.Control as GridView;
//ottenuto il riferimento al GridView registo un EventHandler per la creazione nelle righe
if (Control != null)
{
control.RowCreated += new GridViewRowEventHandler(control_RowCreated);
}
}
protected override void PerformDataBinding(IEnumerable data)
{
base.PerformDataBinding(data);
//solo al termine del databind il numero di item totali viene aggiunto al ViewState
Type type = typeof(Control);
//tramite reflection ottengo il ViewState
FieldInfo info = type.GetField("_viewState", BindingFlags.NonPublic | BindingFlags.Instance);
StateBag value = (StateBag)info.GetValue(this.Control);
//creo i controlli necessari a inserire visualizzare il numero totale di item
Literal lit = new Literal();
lit.Text = string.Concat("item totali: ", value["_!ItemCount"]);
TableCell cel = new TableCell();
//infieno l'aggiungo alla collezione del controllo recuperato nel metodo control_RowCreated
cel.Controls.Add(lit);
if (controlPager != null)
{
controlPager.Controls.Add(cel);
}
}
void control_RowCreated(object sender, GridViewRowEventArgs e)
{
//ottengo il riferimento al controllo dove inserire il numero di item totali
if (e.Row.RowType == DataControlRowType.Pager)
{
controlPager = e.Row.Controls[0].Controls[0].Controls[0];
}
}
}
Per inserire un commento, devi registrarti alla nostra community.






Stampa
Download 
