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":
...
}
}
{
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;
}
{
monDataGridCurrentPageIndex = e.NewPageIndex;
}
En fait non, ça ne marche toujours pas
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
}
}
{
// 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
}
{
monDataGridCurrentPageIndex = e.NewPageIndex;
BindData(); // On recharge les données
}
Voilà ça fonctionne (enfin !)