Bonjour

Je suis confronté à un souci de mise à jour d'un UpdatePanel et j'ai beaucoup de mal à comprendre. Peut être qu'il s'agit d'un truc tout bête, jsute devant mes yeux, mais pour l'isntant je sèche et donc j'en appel à votre bienveillance collective.

Je vous ai placé le code tout entier de ma page en fin de message. J'ai enlevé des lignes qui n'ont pas d'intérêt, genre le remplissage des cellules des tables) histoire de pas trop surcharger, mais le code reste assez long.

Le principe est simple : dans mon ASCX (vide côté HTML) je place un UpdatePanel dans le INIT. Ensuite j'appelle différente Sub pour remplir différentes Table à metre dans un certains ordre dans l'UpdatePanel.
Puis, certaines tables contiennent des LinkBouton et je fais des trucs dans la base de données lorsqu'on click dessus.
A la fin de chaque Sub accroché au LinkBouton par un Addhandler je lance la Sub qui vide les tables et les recharge, et je fais des Up.update() au maxiumum (en disant que je ne peux pas en faire trop).

Voyons les symptômes :
- je clique sur un linkB, ça tourne et ça se recharge bien
- je clique sur un autre linkB ou le même, il ne se passe rien
- je clique encore, le même ou un autre, ça recharge bien, comme si le précédent n'avait pas eu lieu, du tout.

Bilan : je comprends pas comment les clicks peuvent marcher une fois sur deux. Et véritablement une fois sur deux car, si je recharge la page, le premier marche toujours et le second jamais, sauf si je recharge la page, ce qui fait que c'est toujours le premier.

Merci pour votre aide.

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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
 
 
Partial Class Composant_Speed_Circuit
	Inherits System.Web.UI.UserControl
	Private up As New UpdatePanel
 
	Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
		'code d'initialisation de la liste des circuits
		With up
			.ID = "upWindow"
			.UpdateMode = UpdatePanelUpdateMode.Conditional
			.RenderMode = UpdatePanelRenderMode.Inline
			.ChildrenAsTriggers = True
		End With
 
		Dim lblTitre As New Label
		With lblTitre
			.Text = "Accès aux circuits"
		End With
		With up.ContentTemplateContainer.Controls
			.Clear()
			.Add(lblTitre)
			.Add(New LiteralControl("<br />"))
		End With
 
		AffichePositionActuelle()
		AfficheEtape()
		AfficheDestinationPossible()
		Controls.Add(up)
		up.Update()
	End Sub
 
	Sub RemiseAJour()
		up.ContentTemplateContainer.Controls.Remove(up.ContentTemplateContainer.FindControl("lblPositionActuelle"))
		up.ContentTemplateContainer.Controls.Remove(up.ContentTemplateContainer.FindControl("tblDestination"))
		up.ContentTemplateContainer.Controls.Remove(up.ContentTemplateContainer.FindControl("tblEtape"))
		AffichePositionActuelle()
		AfficheEtape()
		AfficheDestinationPossible()
		up.Update()
 
	End Sub
 
	Sub AffichePositionActuelle()
		Dim lblPositionActuelle As New Label
		lblPositionActuelle.Text = New DManager("DataDev").RetournerScalaire("EXEC SPEED_Voyage_PositionActuelle '" & GetUserGUID().ToString & "'")
		lblPositionActuelle.ID = "lblPositionActuelle"
		up.ContentTemplateContainer.Controls.Add(lblPositionActuelle)
		up.Update()
	End Sub
 
	Sub AfficheDestinationPossible()
		Dim tblDestination As New Table
 
		For Each dr As DataRow In New DManager("DataDev").RetournerTable("EXEC SPEED_Voyage_ListeVille '" & GetUserGUID().ToString & "'").Rows
			Dim rDestiantion As New TableRow
			Dim cDestination, cDistance, cDuree, cBouton As New TableCell
			Dim lblDestination, lblDistance, lblDuree As New Label
			Dim lbVoyage As New LinkButton
			lblDestination.Text = dr.Item("VilleF")
			lblDistance.Text = "Distance : " & dr.Item("Distance") & " Km"
			lblDuree.Text = "Durée du voyage : " & dr.Item("Duree")
			With lbVoyage
				AddHandler lbVoyage.Click, AddressOf PrendreRoute
				.Text = "Prendre la route"
				.CommandArgument = dr.Item("VilleF")
			End With
 
			cDestination.Controls.Add(lblDestination)
			cDistance.Controls.Add(lblDistance)
			cDuree.Controls.Add(lblDuree)
			cBouton.Controls.Add(lbVoyage)
			With rDestiantion.Cells
				.Add(cDestination)
				.Add(cDistance)
				.Add(cDuree)
				.Add(cBouton)
			End With
			tblDestination.Rows.Add(rDestiantion)
		Next
 
 
		up.ContentTemplateContainer.Controls.Add(tblDestination)
		up.Update()
	End Sub
 
	Sub AfficheEtape()
		Dim tblDestination As New Table
 
		For Each dr As DataRow In New DManager("DataDev").RetournerTable("EXEC SPEED_Voyage_Etape '" & GetUserGUID().ToString & "'").Rows
			Dim rEtape As New TableRow
			Dim cVilleD, cVilleA, cHeureD, cHeureA, cBouton As New TableCell
			Dim lblVilleD, lblVilleA, lblHeureD, lblHeureA As New Label
			Dim lbEtape As New LinkButton
			With lbEtape
				AddHandler lbEtape.Click, AddressOf AnnulerEtape
				.Text = "Annuler l'étape"
				.CommandArgument = dr.Item("IDHistoVoyage")
			End With
 
			With rEtape.Cells
				.Add(cVilleD)
				.Add(cVilleA)
				.Add(cHeureD)
				.Add(cHeureA)
				.Add(cBouton)
			End With
			tblDestination.Rows.Add(rEtape)
		Next
 
 
		up.ContentTemplateContainer.Controls.Add(tblDestination)
		up.Update()
	End Sub
 
	Sub PrendreRoute(ByVal sender As Object, ByVal e As System.EventArgs)
		Dim lb As LinkButton = sender
		Dim dt As DataTable = New DManager("DataDev").RetournerTable("EXEC SPEED_Voyage_PrendreRoute '" & GetUserGUID().ToString & "','" & lb.CommandArgument & "'")
		RemiseAJour()
		up.Update()
	End Sub
 
	Sub AnnulerEtape(ByVal sender As Object, ByVal e As System.EventArgs)
		Dim lb As LinkButton = sender
		Dim dt As DataTable = New DManager("DataDev").RetournerTable("EXEC SPEED_Voyage_AnnuleEtape '" & GetUserGUID().ToString & "', " & lb.CommandArgument)
		RemiseAJour()
		up.Update()
	End Sub
End Class