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.
Approfondimenti
#557 - Modificare la status bar dei collegamenti del DataGrid di ASP.NET
https://www.aspitalia.com/liste/usag/script.aspx?ID=557
#625 - Introduzione alla creazione di Custom Control
https://www.aspitalia.com/liste/usag/script.aspx?ID=625
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.