[Résolu][ASP .NET][C#] Gridview et PagerTemplate

Bonjour les gens,

Je rencontre un léger problème sur les PagerTemplate d’une Gridview. L’objectif étant d’avoir le PagerTemplate constamment affiché quelque soit le contenu de ma gridview.
Le comportement natif du PagerTemplate fait qu’il est affiché seulement si la page ne peut contenir toutes les lignes de données de ma Datasource.

J’ai googlisé un peu partout, et je ne vois rien sur la possibilité de forcer son affichage. Il y a bien des topics similaires au mien mais sans succès. Soit il n’y a eu aucune réponse, soit la solution n’apporte rien vu que pas tester par la personne ayant fournit l’astuce.

Bref, je bloque. N’auriez-vous pas une solution à mon problème ?

Merci.

De base dans la GridView c’est malheureusement pas prévu…

Par contre, j’ai trouvé ce petit bout de code qui devrait fonctionner.

[code]protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
{
int returnValue = base.CreateChildControls(dataSource, dataBinding);

if (this.TopPagerRow != null && this.AlwaysShowPager)
{
this.TopPagerRow.Visible = true;
}

if (this.BottomPagerRow != null && this.AlwaysShowPager)
{
this.BottomPagerRow.Visible = true;
}

return returnValue;
}[/code]

Si jamais, AlwaysShowPager est une property boolean et ce bout de code va dans une classe qui hérite de GridView, mais ça tu avais sûrement dû le comprendre :D.

Source (dans les commentaires, le code de base est un affreux hack pas beau)

Je vais tester ça. Celà dit, je vais devoir revoir mon usercontrol :XD:

Edit:
Bon, le booléen AlwaysShowPager n’existe pas dans la classe Gridview ni sur GridviewRow.
Mon ami google me trouve bien cette variable mais utiliser principalement au sein de control personnalisés.

Me reste donc la solution du hack tout pas beau pourri. D’ailleurs, je ne sais vraiment pas si je vais l’utiliser.

Non, mais en fait le AllwaysShowPager c’est juste un booléen qui a été rajouté dans la classe qui hérite de Gridview !
Juste pour pouvoir facilement ajouter ou enlever la fonctionnalité. Tu peux aussi bien faire sans, dans ce cas tu fais pas de test.

Exemple :

[code] public class MyGridView : GridView
{
public bool AlwaysShowPager { get; set; }

	protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
	{
		int returnValue = base.CreateChildControls(dataSource, dataBinding);

		if (this.TopPagerRow != null && this.AlwaysShowPager)
		{
			this.TopPagerRow.Visible = true;
		}

		if (this.BottomPagerRow != null && this.AlwaysShowPager)
		{
			this.BottomPagerRow.Visible = true;
		}

		return returnValue;
	}
}[/code]

J’ai testé vite fait et ça fonctionne très bien.

Hop, problème résolu. Merci beaucoup bien que finalement, j’en avait pas besoin ^^. J’ai fait autrement. Parce que le PagerTemplate c’est bien, mais la hauteur de la gridview est toujours variable en fonction du nombre de lignes contenu dans la DataSource. Et en plus, j’étais obligé de désactiver le Viewstate sur ma gridview, ce qui fait que la pagination bug.

Maintenant, j’ai un joooolie gridview fonctionnel à dimension fixe et le pager est toujours affiché :smiley: