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

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

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

TagCloud
BLOG INFO
  • Post: 230
  • Commenti: 95
  • TrackBacks: 23
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom OPML

MVP
CATEGORIE
I PIÙ LETTI DEL MESE
IN EVIDENZA