ProgrammaSubito.it
appunti su ASP.NET 2.0, C#
a cura di Carmine Pacifico
My Facebook

Sostieni ProgrammaSubito.it

GridView - Personalizzare l'ordinamento

Come personalizzare l'ordinamento di una GridView

GridView Custom Sorting

In questo esempio viene mostrato come personalizzare l'ordinamento di una GridView così come dall'esempio seguente.

ID
Nome
Cognome
1CarminePacifico
2MarioRossi
3CarloBianchi
4MicheleRusso
5RosaRossa
6AnnaSara
7GianniMiro
8EmilioSasa
9AriannaAra


>>

File Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits ="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
  <title>ProgrammaSubito.it</title> 
</head>
<body>
  <form id="form1" runat="server">
  <div>
   <asp:GridView
   runat="server"
   id="GridView1"
   AutoGenerateColumns="False"
   AllowSorting="True"
   DataKeyNames="ID"
   OnRowCreated="GridView1_RowCreated"
   OnSorting="GridView1_Sorting">
     <Columns>
      <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
      <asp:BoundField DataField="Nome" HeaderText="Nome" SortExpression="Nome" />
      <asp:BoundField DataField="Cognome" HeaderText="Cognome" SortExpression="Cognome" />
     </Columns>
   </asp:GridView>
  </div>
  </form>
</body>
</html>


File Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
 private DataSet ds = new DataSet(); 

 protected void Page_Load(object sender, EventArgs e)
 {
   ds.ReadXml(AppDomain.CurrentDomain.BaseDirectory + "\\Anagrafica.xml");
   if(!IsPostBack)
   {
     GridView1.DataSource = ds;
     GridView1.DataBind();
   }
 }

 protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
 {
  if (ViewState["SortExpression"] != null)
  {  
   String sortDirection = Convert.ToString(ViewState["SortDirection"]);
   String sortExpression = Convert.ToString(ViewState["SortExpression"]); 
   if (sortExpression == e.SortExpression)
   {
    ViewState["SortDirection"] = ChangeDirection(sortDirection);
   }
   else
   {
    ViewState["SortExpression"] = e.SortExpression;
    ViewState["SortDirection"] = "ASC";
   }
  }
  else
  {
   ViewState["SortExpression"] = e.SortExpression;
   ViewState["SortDirection"] = "ASC";
  }
  DataView dv = ds.Tables[0].DefaultView;
  String SortExpDirection = Convert.ToString(ViewState["SortExpression"]);
  SortExpDirection += " " + ViewState["SortDirection"];
  dv.Sort = SortExpDirection;
  GridView1.DataSource = dv;
  GridView1.DataBind();
 }
 
 private String ChangeDirection(String oldDirection)
 {
   String newDirection = "";
   switch (oldDirection)
   {
     case "ASC":
       newDirection = "DESC";
       break;
     default:
       newDirection = "ASC";
       break;
   }
   return newDirection;
 }
 
 protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
 {
  if (e.Row.RowType == DataControlRowType.Header)
  {
   string NomeColonna;
   int numCell;
   numCell = e.Row.Cells.Count;
   
   for (int i = 0; i < numCell; i++)
   {
    // Recupero il controllo che sta nella cella dell'header
    //che è un LinkButton
    LinkButton LinkButtonOrdinamento = (LinkButton)e.Row.Cells[i].Controls[0];
    NomeColonna = LinkButtonOrdinamento.Text;
       
    //Creo il controllo ImageButton
    ImageButton ImageButtonOrdinamento = new ImageButton();
    ImageButtonOrdinamento.CommandName = LinkButtonOrdinamento.CommandName;
    string commandArgument = LinkButtonOrdinamento.CommandArgument;
    ImageButtonOrdinamento.CommandArgument = commandArgument;
    ImageButtonOrdinamento.ToolTip = "Ordina per " + NomeColonna;
    ImageButtonOrdinamento.Width = (Unit)10;
    
    //stabilisco l'immagine da visualizzare
    ImageButtonOrdinamento.ImageUrl = "frsun.gif";
    if (ViewState["SortExpression"] != null)
    {
     String sortExpression = Convert.ToString(ViewState["SortExpression"]);
     if (LinkButtonOrdinamento.CommandArgument == sortExpression)
     {
       if (Convert.ToString(ViewState["SortDirection"]) == "DESC")
       {
         ImageButtonOrdinamento.ImageUrl = "frgiu.gif";
       }
       else
       {
         ImageButtonOrdinamento.ImageUrl = "frsu.gif";
       }
     }
    }
       
    //Creo il controllo Label
    Label labelNomeColonna = new Label();
    labelNomeColonna.Text = NomeColonna + " ";
    Table tableOrd = new Table();
    TableRow tableRowOrd = new TableRow();
    TableCell tableCell0 = new TableCell();
    tableCell0.Controls.Add(labelNomeColonna);
    tableRowOrd.Cells.Add(tableCell0);
    TableCell tableCell1 = new TableCell();
    tableCell1.Controls.Add(ImageButtonOrdinamento);
    tableRowOrd.Cells.Add(tableCell1);
    tableOrd.Rows.Add(tableRowOrd);
      
    //cancello il controllo linkbutton dalla cella
    e.Row.Cells[i].Controls.Remove(LinkButtonOrdinamento);
      
    //Aggiungo il nuovo controllo
    e.Row.Cells[i].Controls.Add(tableOrd);
   }
  }
 }
}



File Anagrafica.xml
<List>
  <Student ID="1" Nome="Carmine" Cognome="Pacifico" />
  <Student ID="2" Nome="Mario" Cognome="Rossi" />
  <Student ID="3" Nome="Carlo" Cognome="Bianchi" />
  <Student ID="4" Nome="Michele" Cognome="Russo" />
  <Student ID="5" Nome="Rosa" Cognome="Rossa" />
  <Student ID="6" Nome="Anna" Cognome="Sara" />
  <Student ID="7" Nome="Gianni" Cognome="Miro" />
  <Student ID="8" Nome="Emilio" Cognome="Sasa" />
  <Student ID="9" Nome="Arianna" Cognome="Ara" />
</List>


Images
frsun.GIF frsu.GIF frsgiu.GIF