Utiliser asp:DataPager avec une méthode en code be

Publié le 05 septembre 2008 par Jeremy.jeanson

Notre ami asp:DataPAger bien connu des utilisateur de controls DataSource, Linq, SQL et toute la clique. Cependant dès qu'il s'agit de l'utiliser proprement avec une méthode provenant du code behind, ce n'est pas des plus claire.

Voici donc un petite découpage des opération à réaliser : (l'exemple suivant est basé sur le Binding d'un objet Maison).

1. Alimentation en données

Dans un premier temps il fait coder un classe chargée de rechercher les donnée (méthode Bind) et de compter le nombre d'enregistrements retournés (méthode Count). La petite particularité du Bind est qu'il faut lui indiquer l'index à partir duquel on prend des enregistrements, et le nombre d'enregistrements pris. Pour ce genre d'opérations, Linq peut s'avérer très pratique.

public class ObjectDataSourceMaison
{
    public static IEnumerable<Maison> BindMaison(Int32 index, Int32 pageSize)
    {
		...
    }

    public static Int32 CountMaison()
    {
		...
    }
}

2. Placer les contrôles

Trois controls seront utiles à la tâche :

  • ObjectDataSource pour rechercher les données.
  • GridView pour les afficher.
  • DataPager pour faire la fameuse pagination tant recherchée.

On indique donc à notre ObjectDataSource l'objet qu'il va manipuler pour rechercher les données, et les méthodes qu'il devra utiliser. Ensuite on associe notre GridView (ou tout autre control d' affichage de données). Vient ensuite le DataPager auquel on renseigne le propriété PagedControlID avec l'id du GridView.

<asp:ObjectDataSource runat="server" ID="ObjectDataSource1"
	EnablePaging="true"
	TypeName="ObjectDataSourceMaison"
	SelectMethod="BindMaison"
	SelectCountMethod="CountMaison"
	StartRowIndexParameterName="index" MaximumRowsParameterName="pageSize" />

<asp:GridView runat="server" ID="GridView1"
	DataSourceID="ObjectDataSource1" />

<asp:DataPager ID="DataPager1" runat="server" SkinID="DataPager" 
	PagedControlID="GridView1" />

Et voila, le tour est joué. Un petit UpDatePanel serrait aussi le bienvenu, mais bon... il faut bien vous laisser quelques choses à faire, non?