Errata Corrige..per usare un eufemismo

di Marco Leoncini, in asp.net,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

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

Nella stessa categoria
I più letti del mese