La GridView è sicuramente il controllo più complesso che è stato aggiunto nella versione 2.0 di ASP.NET, poichè ti permette di realizzare con pochi click funzionalità di paging e sorting dei dati; questi dati devono però essere presi da dei Data Source Control.
Se invece, vogliamo effettuare un databind "a mano" della GridView, dobbiamo implementare sia i meccanismi di paging che quelli di sorting. Se questo non viene fatto, e viene messa a True la proprietà AllowPaging, verrà sollevata un'eccezione con questo messaggio:
The GridView 'GridViewID' fired event PageIndexChanging which wasn't handled
Per evitare questo banale errore, bisogna implementare gli event handler per gli eventi Sorting e PageIndexChanging.
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="false"
OnPageIndexChanging="GridView1_PageIndexChanging"
OnSorting="GridView1_Sorting"
PageSize="15"
AllowPaging="true"
AllowSorting="true">
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dt = GridView1.DataSource as DataTable;
if (dt != null)
{
DataView dv = new DataView(dt);
dv.Sort = String.Format("{0} {1}", e.SortExpression, ConvertSort(e.SortDirection));
GridView1.DataSource = dv;
GridView1.DataBind();
}
}
private string ConvertSort(SortDirection sortDirection)
{
string m_SortDirection = String.Empty;
switch (sortDirection)
{
case SortDirection.Ascending:
m_SortDirection = "ASC";
break;
case SortDirection.Descending:
m_SortDirection = "DESC";
break;
}
return m_SortDirection;
}
In questo modo possiamo sfruttare le funzionalità di sorting e paging del controllo di GridView, anche se non lo colleghiamo ad un data source control e se effettuiamo un databind esplicito via codice o tramite le nostre classi di buisiness.