Errata Corrige..per usare un eufemismo

Marco Leoncini

di Marco Leoncini, in asp.net, martedì 25 luglio 2006 ore 09.13

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

Commenti

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.



Segnala su: Facebook MSDN Social Twitter Segnalo Wikio Diggita Technorati Stumbleupon Google Yahoo FriendFeed Delicious Furl

Nella stessa categoria
I più letti del mese
TagCloud
BLOG INFO
  • 242 post, 108 commenti, 23 trackback
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom
IN EVIDENZA