DataGrid con paginazione via URL

di Daniele Bochicchio, in ASP.NET, C#, System.Data,

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

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.

Approfondimenti

I più letti di oggi