GridView e ControlAdapter

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à

Nella stessa categoria

Commenti
»»»» nostromo scrive:
GridView e ControlAdapter

anzi grazie per avermi ricordato che devo correggere questo post, in pratica si tratta di recuperare dal ViewState il valore di _!ItemCount, come spiega anche Andrea Boschin quà: http://blog.boschin.it/articles/gridview_virtualitemcount.aspx, mi capita spesso di confondere le due cose...sarà la vecchiaia e il caldo.

ciao marco
24/07/2006 ore 14.21
imperugo scrive:
GridView e ControlAdapter

Scusa ma invece di fare tutto questo giro ed usare la reflection non potevi semplicemente castare il sender nell'evento????

una roba tipo questa:

protected override void OnInit(EventArgs e)
{

base.OnInit(e);

GridView myGrid = this.Control as GridView;

if (myGrid != null)
{
myGrid.DataBound += new EventHandler(myGrid_DataBound);

}
}

void myGrid_DataBound(object sender, EventArgs e)
{
int pagine = ((GridView)sender).PageCount;
}
24/07/2006 ore 13.03 | 1 risposta
»»»» nostromo scrive:
Re: GridView e ControlAdapter

ho sbagliato non è il numero di pagine :) ma il vecchio VirtualItemCont.

non so perche ma scrivo sempre numero di pagine invece che numero di record.

ciao marco
24/07/2006 ore 14.03

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


TagCloud
BLOG INFO
  • Post: 232
  • Commenti: 103
  • TrackBacks: 23
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom OPML
CATEGORIE
I PIÙ LETTI DEL MESE
IN EVIDENZA