Errata Corrige..per usare un eufemismo

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];
}

}
}


Nella stessa categoria

Commenti

Per inserire un commento, devi registrarti alla nostra community.

© 1998-2008 - nostromo - Il blog di Marco Leoncini

TagCloud
BLOG INFO
  • Post: 219
  • Commenti: 87
  • TrackBacks: 17
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom OPML

MVP
CATEGORIE
I PIÙ LETTI DEL MESE
IN EVIDENZA