Bon, alors je suis plutôt content, j’ai réussi finalement à terminer mon contrôle et il fonctionne comme je le souhaitais.
Finalement je suis repartis sur l’idée du CustomControl et effectivement c’est plutôt chaud à implémenter, mais je suis content de l’avoir fait, j’ai appris pas mal de choses, même s’il n’est certainement pas parfait.
Je vais vous faire un petit résumé sur comment le faire, je pense que certaines personnes pourront être intéressées. Je ne vais pas mettre le code source ici, déjà parce qu’il n’est pas totalement terminé et qu’il est un peu crados mais aussi parce que c’est un peu long. Mais si vraiment je l’envoie sans problème à celui qui le désire.
Donc, passons aux choses sérieuses :
Déjà, j’ai créé un contrôle qui dérive de WebControls (normal, c’est un contrôle Web). Certains me diront que j’aurais pu le faire dériver de ListControl, comme CheckBoxList, RadioButtonList, etc. Mais ce n’était pas possible car la collection Items (qui définit l’ensemble des Items de la liste) des ListControl est forcément une ListItemCollection, ce qui ne me convenait pas car je souhaitais utiliser ma propre collection d’Items.
J’ai donc créé une RechercheListeItemCollection et une RechercheListeItem afin de gérer la collection qui va s’afficher dans mon contrôle.
Ensuite, j’ai donc implémenté l’interface IRepeatInfoUser qui permet justement de créer un contrôle qui répète une liste d’items. Rien de bien compliqué pour cette méthode, mise à part la méthode RenderItem() qui permet justement d’afficher les contrôles. En fait il suffit d’afficher simplement les contrôles avec la méthode monControle.Render(), en les ayant configurés selon la valeur de la collection Items.
Le soucis majeur est que ces contrôles, s’ils sont modifiables par l’utilisateur, doivent récupérer les valeurs modifiées avant le Postback. Ceci se fait en implémentant l’interface IPostBackDataHandler. Il faut inscrire les contrôles qui doivent renvoyer des données PostBack avant de les afficher dans la page en utilisant la méthode Page.RegisterRequiresPostBack().
Une fois les contrôles enregistrés, on récupère les données du Postback à l’aide de la méthode LoadPostData(), et il suffit de modifier les valeurs des Items à l’aide de ces valeurs récupérées du postback.
Enfin, j’ai aussi implémenté l’interface IPostBackEventHandler car je souhaitais que mes boutons supprime une ligne lorsque je cliquais dessus. C’est en gros le même principe que pour l’interface IPostBackDataHandler, il faut inscrire les boutons sur la page avec un string contenant une valeur permettant d’identifier l’action effectuée par l’utilisateur, puis une méthode dans le contrôle (RaisePostBackEvent) permet de récupérer cette valeur pour ensuite faire ce que l’on désire.
J’espère avoir été relativement clair et que cela pourra aider quelqu’un (pas sûr :roll: ). Mais je ne voulais pas ne rien expliquer, étant donné que l’on a été sympa avec moi et que l’on a essayé de m’aider. Voilà voilà, merci à tous… et à bientôt
Et de nouveau, si quelqu’un veut plus de renseignement il m’envoie un PM ou écrit ici je réponds volontier! D’ailleurs avec le même genre de code on peut faire très facilement un contrôle permettant à un utilisateur d’uploader autant de fichiers qu’il le désire… pour ceux que ça intéresse :P.