Bonjour,
Comment faire pour recupérer l'évenement double Click sur un DataGrid et renvoyer la ligne.
Merci par avance.
NB j'utilise VS 2003
Bonjour,
Comment faire pour recupérer l'évenement double Click sur un DataGrid et renvoyer la ligne.
Merci par avance.
NB j'utilise VS 2003
-----------------------------
Ima@d
Oui, mais comment ?
-----------------------------
Ima@d
je ne penses pas que tu puisses le faire en Web. (du moins en asp.net , faut voir en javascript)
La technique que je vais décrire ci après est normalement à utiliser dans la cadre du développement de contrôles personnalisés. Ce qui va suivre n'est donc pas très objet et cela me fait un peu mal de l'écrire. C'est un code tout à fait fonctionnel, mais il ne fait pas parti des 'bonnes manières'. Néanmoins, cela vous sortira de la panade.
Explications
La communication entre la client (la navigateur) et le serveur (la WebForm), se fait via des appels successifs appelés PostBack. Pour vous en assurer, il vous suffit d'afficher la source d'une page dans votre navigateur pour constater la présence d'une fonction javascript appelée __doPostBack. C'est cette fonction qui est appelée par les déférents évènements cotés clients provoquant le PostBack de la page.
Les contrôles ASP.NET implémente en natif la gestion de certains évènements clients. Mais la plateforme permet en fait de réagir à n'importe quel évènement et de déclencher un PostBack.
La démarche est très simple et sachez qu'elle est implémentée en interne par tous les contrôles que vous utilisez. Par exemple, si l'évènement TextChange d'un TextBox fonctionne, c'est que ce contrôle utilise la fonctionnalité décrite ci-après.
Ce qu'il faut
1) Il faut être capable d'écrire un petit script client dans l'évènement HTML qui nous intéresse et qui provoquera un PostBack. C'est la méthode GetPostBackEventReference qui nous y aidera. Consultez la documentation Microsoft pour vous faire une idée de la grande variété de possibilités mises à votre disposition par les différentes surcharges de cette méthode.
2) Il faut aussi être capable, coté serveur, de réagir à ce PostBack. Ce comportement est assuré par l'interface IPostBackEventHandler. Reportez vous à la documentation Microsoft pour plus de renseignements.
Mise en situation et test
Pour vous mettre en situation, créez une WebForm, ajoutez un contrôle Image ainsi qu'un contrôle TextBox respectivement nommés MonImage et MonTextBox.
Ajoutez ensuite le code suivant :
C'est fini, testez, cela doit fonctionner. Le double click sur l'image provoque bel et bien un PostBack. Le traitement coté serveur est bien exécuté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; publicpartialclass_Default : System.Web.UI.Page , IPostBackEventHandler { protectedvoid Page_Load(object sender, EventArgs e) { MonImage.Attributes.Add("ondblclick", ClientScript.GetPostBackEventReference(this, "abcd")); } publicvoid RaisePostBackEvent(string eventArgument) { MonTextBox.Text = eventArgument; } }
Histoire de mieux comprendre, affichez le source de votre page HTML dans Internet Explorer et allez voire ce qui a été placé dans l'attribut ondblclick de la balise HTML de votre image. C'est la méthode GetPostBackEventReference qui a fournit ce code.
Notez avec intérêt comment l'argument 'abcd' est transmis au travers du PostBack.
Pour aller plus loin
Une technologie comme Ajax permet d'implémenter de façon très puissante la communication entre le client et le serveur. Mais, sachez que l'on peut faire des choses très similaires en utilisant ce qui existe en natif dans le Framework. Il est tout a fait possible d'exécuter du code serveur au travers d'un appel XML puis d'adapter l'IHM HTML du client en fonction du résultat retourné.
Bonne continuation pour ce qui est d'implémenter ce mécanisme sur une DataGrid ou tout autre contrôle.
NOTE IMPORTANTE : Ce code est un code .NET 2.0. De mémoire, le mécanisme est différente en .NET 1, c'est la méthode Page.GetPostBackEventReference qui est à utiliser (cette méthode est obsolète en 2.0).
Michaël LEBRETON - Developpeur / Formateur indépendant
http://www.netkoders.com
Merci mlebreton
-----------------------------
Ima@d
De rien, maintenant, il vous reste à trouver une solution pour attacher un PostBack aux évènements des lignes du DataGrid, ce qui risque d'être moins comique. J'y ai un peu réfléchis et j'ai pensé aux éventuelles solutions suivantes :
1) En ASP.NET 2.0 nous avons les ControlAdapter qui pourrait permetre ce travail.
2) La création d'un contrôle personnalisé héritant de DataGrid permetrait la surcharge de la méthode RenderControl qui appelerait RenderControl de la classe de base, puis injecterait les appels PostBack sur les lignes (via peut-être une expression régulière) puis retournerait le code HTML final.
3) Un script qui serait envoyé sur le client pour attacher un PostBack au évènements de chaque ligne de la table HTML arrivée sur le client.
A mes yeux la solution n°2 est sans doute la meilleur. Certe cette solution nécessiterait le remplacement des DataGrid par le contrôle personnalisé sur l'ensemble des pages déjà existantes, mais ce travail peut être effectué par les outils de remplacement de VS donc...
Bon courage.
Michaël LEBRETON - Developpeur / Formateur indépendant
http://www.netkoders.com
ok ok, merci les amis
-----------------------------
Ima@d
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager