création dynamique d'événements [solution]

création dynamique d'événements [solution] - C#/.NET managed - Programmation

Marsh Posté le 20-03-2003 à 15:56:49    

bonjour,
 
je bosse sur une appli web (vb/asp.net). dans une webForm j'ai un placeholder dans lequel je place un tableau dont on ajoute des ligne en réaction à un événement (clic sur bouton). dans chaque cellule de ce tableau est créé un bouton.
 
ca donne a peu près ça (attention code pas bô  :whistle:  )
 

Code :
  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         compteur = hidden
  3.                
  4.         Dim i As Integer
  5.         Dim numrows As Integer = compteur
  6.         Dim numcells As Integer = 1
  7.         Dim j As Integer
  8.         For j = 0 To numrows
  9.             Dim r As New HtmlTableRow()
  10.             For i = 0 To numcells
  11.                 Label1.Text = CType(compteur, String)
  12.                 Dim c As New HtmlTableCell()
  13.                 c.Controls.Add(New LiteralControl("<input type='submit' value='Button " & j & "-" & i & "' id=' Button " & j & "-" & i & "' runat='server'/>" ))
  14.                 r.Cells.Add(c)
  15.             Next i
  16.             Tableau.Rows.Add(r)
  17.             PlaceHolder1.Controls.Add(Tableau)
  18.         Next j
  19.         hidden += 1
  20.     End Sub


 
 
j'aimerai pouvoir recupérer la valeur d'un bouton lors d'un clic.
j'ai plusieurs pistes :
   du JIT, mais ca passe par du COM+ et c'est pas vraiment la politique de la maison...
   faire un gros literal avec du jscript dedans ( :cry: )
   créer dynamiquement un événement pour chaque bouton (le rêve...)
 
voilà, si kkun a une idée ou a déjà eu le même problème.


Message édité par genesis le 21-03-2003 à 11:55:26
Reply

Marsh Posté le 20-03-2003 à 15:56:49   

Reply

Marsh Posté le 20-03-2003 à 17:20:18    

genesis a écrit :

bonjour,
 
je bosse sur une appli web (vb/asp.net).


 
Alors précise dans ton sujet car par défaut c'est marqué C#
En plus il y a une section ASP et une section VB.

Reply

Marsh Posté le 20-03-2003 à 17:40:17    

nraynaud a écrit :


 
Alors précise dans ton sujet car par défaut c'est marqué C#
En plus il y a une section ASP et une section VB.


 
je suis dans la section .net non ?
dans la section asp il n'y a pas d'asp.net
la section vb s'arrete a vb6
 
et si tu me trouves la solution en c# je n'y voit aucun inconvenient  :D  
 
"tout ca pour dire qu'il y a de belles ballades à faire dans le coin"   :)

Reply

Marsh Posté le 20-03-2003 à 18:05:47    

genesis a écrit :


 
je suis dans la section .net non ?
dans la section asp il n'y a pas d'asp.net
la section vb s'arrete a vb6
 
et si tu me trouves la solution en c# je n'y voit aucun inconvenient  :D  
 
"tout ca pour dire qu'il y a de belles ballades à faire dans le coin"   :)  


 
 
Je vois pas du tout où est le pb, qu'est-ce qui t'empêche d'associer un objet différent à chaque bouton créé ? Mais l'ASP ne m'intéresse pas, et le bout de code que je viens de voir est loin de me séduire (c'est quoi ce bordel où y'a un mélange HTML/VB ?).

Reply

Marsh Posté le 20-03-2003 à 18:26:42    

nraynaud a écrit :


 
 
Je vois pas du tout où est le pb, qu'est-ce qui t'empêche d'associer un objet différent à chaque bouton créé ? Mais l'ASP ne m'intéresse pas, et le bout de code que je viens de voir est loin de me séduire (c'est quoi ce bordel où y'a un mélange HTML/VB ?).
 


 
'cuse pour le bordel mais c'est le resultat de diverses tentatives (et j'ai pas fait tout le menage avant de poster)
 
le probleme ce pose a plusieurs niveau :
 
 dans ce "pseudo-code" j'utilise un literalcontrol pour creer un bouton coté client et non pas coté serveur. donc j'obtiens ce que je veux c'est a dire un bouton créé dynamiquement fonction des réactions du client.et ce au sein d'une cellule de tableau elle aussi créé à la volée. le tout dans un control serveur Web (placeholder).
donc j'ai bien un bouton mais du coté client et ne peut y associé un événement via par exemple un :
 
AddHandler bouton.Click, AddressOf Methode_associé
 
A l'inverse si je remplace le literalControl par :
 
c.control.add(bouton)
je pourrai a la rigueur associé un evenement (c'est gagné non plus, je suis un boulet). mais la création d'un nouveau bouton ecrase la précedente et je me retrouve avec 'n' ligne et 'n' cellule et un seul bouton a la position 'n'.
 
je suis donc tout ouïe. histoire que j'aille me pendre devant ma bétise  :(  
 
 
 
 

Reply

Marsh Posté le 20-03-2003 à 19:51:51    

genesis a écrit :


 
'cuse pour le bordel mais c'est le resultat de diverses tentatives (et j'ai pas fait tout le menage avant de poster)
 
le probleme ce pose a plusieurs niveau :
 
 dans ce "pseudo-code" j'utilise un literalcontrol pour creer un bouton coté client et non pas coté serveur. donc j'obtiens ce que je veux c'est a dire un bouton créé dynamiquement fonction des réactions du client.et ce au sein d'une cellule de tableau elle aussi créé à la volée. le tout dans un control serveur Web (placeholder).
donc j'ai bien un bouton mais du coté client et ne peut y associé un événement via par exemple un :
 
AddHandler bouton.Click, AddressOf Methode_associé
 
A l'inverse si je remplace le literalControl par :
 
c.control.add(bouton)
je pourrai a la rigueur associé un evenement (c'est gagné non plus, je suis un boulet). mais la création d'un nouveau bouton ecrase la précedente et je me retrouve avec 'n' ligne et 'n' cellule et un seul bouton a la position 'n'.
 
je suis donc tout ouïe. histoire que j'aille me pendre devant ma bétise  :(  
 
 
 
 
 


 
oui tu es un boulet [:spamafote]
 
c sur que si tu mets le meme bouton dans toutes les cellules ca marchera pas :sarcastic:

Reply

Marsh Posté le 20-03-2003 à 19:53:58    

genesis a écrit :


dans la section asp il n'y a pas d'asp.net
la section vb s'arrete a vb6


 
ouais mais bon ASP et ASP.NET on s'est dit qu'y avait pas besoin de préciser :o
Et pour VB, y a juste marqué VB, donc en quoi ça s'arrête à la 6 :??:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 21-03-2003 à 09:51:38    

antp a écrit :


 
ouais mais bon ASP et ASP.NET on s'est dit qu'y avait pas besoin de préciser :o
Et pour VB, y a juste marqué VB, donc en quoi ça s'arrête à la 6 :??:


 
je dis pas pas que la section vb doit s'arréter a la version 6. (de fait c'est le cas). mais dans ce cas pourquoi mettre une section ".NET,c#". dans ce cas "c#" suffit ...

Reply

Marsh Posté le 21-03-2003 à 09:54:13    

HappyHarry a écrit :


 
oui tu es un boulet [:spamafote]
 
c sur que si tu mets le meme bouton dans toutes les cellules ca marchera pas :sarcastic:


 
j'aurais du relire ce que j'ai ecris -> donc le paragraphe que tu quotes induisait la question suivante : comment créer un bouton différent a chaque fois ?
 
mais merci de ton aide

Reply

Marsh Posté le 21-03-2003 à 10:19:34    

genesis a écrit :

mais dans ce cas pourquoi mettre une section ".NET,c#". dans ce cas "c#" suffit ...


 
j'en sais rien moi, y en a qui voulaient cette section, on l'a rajoutée, on peut la virer aussi :D Y a jamais eu de topics sur C# d'ailleurs...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 21-03-2003 à 10:19:34   

Reply

Marsh Posté le 21-03-2003 à 10:22:49    

antp a écrit :


 
j'en sais rien moi, y en a qui voulaient cette section, on l'a rajoutée, on peut la virer aussi :D Y a jamais eu de topics sur C# d'ailleurs...


 
moi je l'aime bien cettes section  :sweat:  
y a jamais personne dessus, on se sent comme a la campagne, loin des grandes villes polluées de Java  :whistle:

Reply

Marsh Posté le 21-03-2003 à 11:58:39    

voilà la solution
 

Code :
  1. Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.         compteur = hidden
  3.         Dim i As Integer
  4.         Dim numrows As Integer = compteur
  5.         Dim numcells As Integer = 1
  6.         Dim j As Integer
  7.         For j = 0 To numrows
  8.             For i = 0 To numcells
  9.                 Label1.Text = CType(compteur, String)
  10.                 Dim objBouton As New WebControls.Button()
  11.                 objBouton.ID = "bouton " + CType(j, String) + CType(i, String)
  12.                 objBouton.Text = objBouton.ID
  13.                 AddHandler objBouton.Click, AddressOf Button_Click
  14.                 PlaceHolder1.Controls.Add(objBouton)
  15.             Next i
  16.             Dim spacer As LiteralControl = New LiteralControl("<br>" )
  17.             PlaceHolder1.Controls.Add(spacer)
  18.         Next j
  19.     End Sub
  20.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  21.         hidden += 1
  22.     End Sub
  23.     Sub Button_Click(ByVal s As Object, ByVal e As EventArgs)
  24.         Response.Write("Click!" )
  25.     End Sub


 
en fait la liaison entre le nouveau bouton et l'événement se fait au page load (couillon que je suis  :pt1cable:  )
 
mon bouton "ajout" ne sert qu'a incrementer mon compteur.
 
je sais c'est pas propre  :na:  mais ca peut toujours servir à quelqu'un.

Reply

Marsh Posté le 25-03-2003 à 09:03:33    

Affectivement, ca sert à quelqu'un... moi en l'occurence. Merci ! C'est génial, meme plus besoin de poser les questions :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed