Nello script #557 abbiamo visto come modificare la status bar visualizzata sui link contenuti nel pager del DataGrid in modo da visualizzare la pagina sulla quale si desidera arrivare.
Lo script di oggi è una variante certamente più utile, perchè permette di ovviare ad uno dei limiti più fastidiosi di questo control, ovvero all'impossibilità di creare url che puntino direttamente ad una pagina specifica.
La modifica riguarda la cancellazione dell'evento di cambio pagina, che è gestito attraverso la querystring in fase di associazione dei dati, e la successiva aggiunta di una parte che intercetta l'evento ItemCreated, rimuove i LinkButton creati in automatico dal control ed aggiunge al loro posto dei nuovi control HtmlAnchor che puntano alla pagina corrente con l'aggiunta della pagina da selezionare in querystring.
// routine di estrazione dati
void bindData () {
// effettuo il DataBinding sul control
// connessione
SqlConnection conn = new SqlConnection(connstring);
// query
SqlDataAdapter query = new SqlDataAdapter("SELECT * FROM sales", conn);
// creo il dataset
DataSet querydataset = new DataSet();
query.Fill(querydataset);
if (Request["p"] != null)
myDataGrid.CurrentPageIndex = Convert.ToInt32(Request["p"])-1;
myDataGrid.DataSource = querydataset;
myDataGrid.DataBind();
}
private void myDataGrid_ItemCreated(object sender, DataGridItemEventArgs e)
{
// solo se è il pager
if (e.Item.ItemType == ListItemType.Pager) {
// ricava url
string url = Request.Url.ToString();
// ripulisco pagina corrente
url = url.Replace("p=" + Request["p"] + "&", String.Empty);
url = url.Replace("?p=" + Request["p"], String.Empty);
url = url.Replace("&p=" + Request["p"], String.Empty);
url = String.Concat(url, (url.IndexOf("?")<0) ? "?":"&", "p={0}");
// elenco tutti i controls all'interno
TableCell pg = (TableCell) e.Item.Controls[0];
// control con link
HtmlAnchor h;
LinkButton lb;
for (int i = 0; i<pg.Controls.Count;i+=2) {
// intercetto solo i LinkButton e li sostuisco
if (pg.Controls[i].ToString().IndexOf("LinkButton") >=0) {
// ricavo il numero di pagina
lb = (LinkButton) pg.Controls[i];
// nuovo collegamento HTML
h = new HtmlAnchor();
h.HRef = String.Format(url, lb.Text);
h.InnerHtml = lb.Text;
// rimuovo ed aggiungo nuovo control
pg.Controls.RemoveAt(i);
pg.Controls.AddAt(i, h);
}
}
}
}
La modifica si occupa di non modificare la querystring, così da rendere possibile l'utilizzo di url come
http://localhost/search.aspx?key=ASP.NET
con all'interno un'eventuale chiave di ricerca con cui popolare la querystring.
Per riutilizzare al massimo il codice, è suggeribile creare un custom control.
Per approfondimenti si veda:
#557 - Modificare la status bar dei collegamenti del DataGrid di ASP.NET
http://www.aspitalia.com/liste/usag/script.aspx?ID=557
#625 - Introduzione alla creazione di Custom Control
http://www.aspitalia.com/liste/usag/script.aspx?ID=625
- StringValidatorAttribute ConfigurationProperty e DefaultValue
- #929 - Impersonation di utente per l'esecuzione di codice in una pagina ASP.NET
- Realizzare un controllo custom in ASP.NET AJAX - Seconda parte
- #926 - Autenticazione con Membership API e selezione del dominio per Active Directory
- Realizzare un controllo custom in ASP.NET AJAX - Prima parte
- #924 - Evitare problemi di path canonicalization con ASP.NET
- Realizzare applicazioni ASP.NET sicure - Seconda parte
- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti
- Modificare i CSS Friendly Control Adapters
- #936 - Aggiungere una riga con il totale calcolato al GridView
- A volte ritornano... GridView vs Repeater vs ListView vs Custom
- Slide e demo della mia sessione ai Community Days online
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Stampa
Snippet
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!