GridView e ControlAdapter

di Marco Leoncini, in asp.net,

Non so perchè la sera sul tardi finisco sempre a guardare un B-Movie.
ieri sera, o meglio stamani alle una, la scelta è caduta su una produzione Cino/Indiana.
il titolo The Park...sorvoliamo la trama...tanto è il solito luna park costruito su un cimitero, quando lo capiranno gli architetti che ste cose non si fanno :D

comunque ringrazio la pellicola, ha fatto si che tutta la mia attenzione fosse sul problema da risolvere.

nel tempo libero ho realizzato un progetto Low Cost per un amico, un piccolo gestionale per le spiagge, ne ho riparlato in passato in modo frammentario e sotto diversi aspetti, ultimo la conversione nel ex DLING.

la scorsa settimana mi ha chiesto se potevo aggiungere il numero totale di righe nelle varie schermate di riepilogo.
per inciso ho utilizzato in quasi ogni pagina GridView DetailsView e ObjectDataSorce.

le alternative erano due sostituire il GridView con uno custom o magari realizzare un ControlAdapter.

la scelta è caduta sulla seconda opzione non avevo voglia di utilizzare il Find&Replace:

namespace Adapter
{
    public class DataGridFx : DataBoundControlAdapter 
    {
        GridView control = null;
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            control = this.Control as GridView;
         
            if (Control != null)
            {
                control.RowCreated += new GridViewRowEventHandler(control_RowCreated);
               
            }
        }
        void control_RowCreated(object sender, GridViewRowEventArgs e)
        {
            Type type = typeof(GridView);
            
            FieldInfo info = type.GetField("_pageCount", BindingFlags.NonPublic | BindingFlags.Instance);
           
            int value = (int)info.GetValue(this.Control);
            if (e.Row.RowType == DataControlRowType.Pager)
            {
                Literal lit = new Literal();
                lit.Text = string.Concat("pagine totali: ", value);
                TableCell cel = new TableCell();
                cel.Controls.Add(lit);
                e.Row.Controls[0].Controls[0].Controls[0].Controls.Add(cel);
            }    
         
        }
    }

usare la reflection in questo caso è stato indispensabile, la classe base è troppo generica e non espone le caratteristiche specifice di ogni WebControl.

anche se risolve egregiamente il problema, in quanto così ogni GridView ha il numero totale di righe, la cosa giusta da fare è crearsi un GridView custom che richiami i metodi di un AdapterCustom, in pratica crearsi una libreria di WebControl che estenda ogni WebControl presente nel Framework e dotarlo del rispettivo Adapter...

aspettaevi novità nel lab :) prima o poi

N.B il codice per usare un eufemismo è errato quello corretto quà

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