Le Blog de SamsamTS

DataGrid Paging

Dans le cadre d'un projet Web en C# .NET, j'ai été amené à travailler avec le contrôle DataGrid. Tout allais bien jusqu'à ce que la pagination pointe le bout de son nez.

Je vous fait grâce du paramètrage des propriétés du contrôle, ce n'est pas le plus dur ;)

Déjà première difficulté, pourquoi l'évènement ItemCommand est-il appelé lors d'un changment de page ?

En fait, à chaque évènement lié à un clic dans le DataGrid, l'évènement ItemCommand est appelé puis seulement ensuite les éventuels autres évènement sont appelés. C'est pourquoi il faut filtrer les commandes :

Code :

private void monDataGrid_ItemCommand(object source, DataGridCommandEventArgs e)
{
   switch(e.CommandName)
   {
   case DataGrid.PageCommandName:
      return; // Commande de changement de page => on ignore
   case DataGrid.EditCommandName:
      ...
   case "CustomCommand":
      ...
   }
}

Super ça ne plante plus, mais la pagination ne marche toujours pas.

Normal puisque l'on ne traite pas le changement page. Facile :

Code :

private void monDataGrid_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
   monDataGridCurrentPageIndex = e.NewPageIndex;
}

En fait non, ça ne marche toujours pas :cogne:
Quand on change la page du DataGrid, c'est toute la page qui est rechargée, donc déjà :

Code :

private void Page_Load(object sender, EventArgs e)
{
   // On ne charge les données que la première fois que la page est affichée
   if (this.IsPostBack == false)
   {
      BindData(); // fonction dans laquelle il faut mettre le chargement des données et le DataBind
   }
}

Ensuite lorsqu'effectivement c'est un changement de page :

Code :

private void monDataGrid_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
   monDataGridCurrentPageIndex = e.NewPageIndex;
   BindData(); // On recharge les données
}

Voilà ça fonctionne (enfin !)  8)

Vos commentaires

Le lundi 6 mars 2006 à 12:13 , commentaire par iteratif :: #

 

Pour faire cours, je fais :

if (!IsPostBack)
{
BindData();
}

voila c'est tout.... ;)

 

Le lundi 6 mars 2006 à 16:23 , commentaire par SamsamTS :: #

 

Très constructif merci :mrgreen:

 

Ajouter un commentaire