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.
| | |
| 1 | Carmine | Pacifico |
| 2 | Mario | Rossi |
| 3 | Carlo | Bianchi |
| 4 | Michele | Russo |
| 5 | Rosa | Rossa |
| 6 | Anna | Sara |
| 7 | Gianni | Miro |
| 8 | Emilio | Sasa |
| 9 | Arianna | Ara |
>>
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