Question

J'ai un problème avec un contrôle de pager que je construis. Mon code est le suivant

protected override void CreateChildControls()
{
  base.CreateChildControls();

  pnl = new Panel { ID = "NewsPager", CssClass = "NewsPager" };
  Controls.Add(ddl);

  AddPagerControls();
}

AddPagerControls ajoute un groupe de LinkButtons qui utilisent le même gestionnaire d'événements:

private void li_Click(object sender, EventArgs e)
{
  selectedValue = ((LinkButton) sender).CommandArgument;
  AddPagerControls();
}

Ce qui se passe maintenant, c’est que lorsque j’ajoute le & "Suivant &"; LinkButton, il obtient son CommandArgument défini correctement en utilisant:

var liNext = new LinkButton {ID = "NewsPagerLinkNext", Text = ">", CommandArgument = (int.Parse(value) + 1).ToString()};
liNext.Click += new EventHandler(li_Click);
pnl.Controls.Add(liNext);

i.e. si la page en cours est 2, le " Suivant " CommandArgument du bouton sera 3 lors du débogage du code. Cependant, lorsque la page est affichée et que je clique sur le bouton suivant, cela fonctionnera une fois (en passant de la page 1 à la page 2), mais il restera toujours égal à 2, même si dans le code, il est défini sur 3. Il doit donc se passer quelque chose lorsque le contrôle est rendu.

Je suis un peu désemparé ici. J'ai essayé de modifier l'appel de AddPagerControls dans CreateChildControls en if (! Page.IsPostBack) {AddPagerControls ();}, mais le gestionnaire d'événements ne se déclenche pas du tout.

Modifier: P.S.Je fais un pnl.Controls.Clear () lorsque la méthode AddPagerControls est appelée depuis le gestionnaire d'événements, sinon les LinkButtons seraient ajoutés deux fois.

Modifier: P.P.S. Je précise les boutons de liaison à ajouter à chaque fois, car je n'ai besoin d'afficher que 5 liens s'il existe plus de pages, c'est-à-dire

.

< < < 2 3 4 5 6 7 & Gt; > >

Était-ce utile?

La solution

Ce que je ne comprends pas, c'est pourquoi vous régénérez tout le temps vos contrôles de pagination. Ne pourriez-vous pas simplement utiliser une approche où vous avez vos liens-boutons & "; Prev &"; et " next " et vous conservez dans l'état d'affichage de votre contrôle (en tant que propriétés distinctes) la page en cours d'affichage et la quantité d'éléments (c'est-à-dire la taille de la page)?

Dans le gestionnaire d'événements, vous effectuez ensuite les actions appropriées, car vous savez que votre page actuelle sera quelque chose comme currentPageIndex+1 ou quelque chose de similaire. Régénérer tout le temps les boutons Précédent / Suivant, en particulier dans le gestionnaire i_Click, n’est pas une bonne approche de mon point de vue et c’est aussi ce qui peut poser problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top