Bonjour tout le monde.
Je crois que j'ai encore zappé un détail dans la gestion du PsotBack dans un UpdatePanel, mais je trouve pas.
Alors je soumets mon code :
Côté HTML :
J'ai enlevé quelques TableRow pour faire plus léger. Elles affichent des données, sans rapport avec mon soucis.
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 <%@ Control Language="VB" AutoEventWireup="false" CodeFile="GestionMenu.ascx.vb" Inherits="Module_Gite_GestionMenu" %> <asp:DropDownList ID="ddlMenu" runat="server" AutoPostBack="true"></asp:DropDownList> <ajax:UpdatePanel ID="upMenu" runat="server" ChildrenAsTriggers="true"> <Triggers> <ajax:AsyncPostBackTrigger ControlID="ddlMenu" EventName="SelectedIndexChanged" /> </Triggers> <ContentTemplate> <asp:Table ID="tblMenu" runat="server"> <asp:TableRow> <asp:TableCell> <asp:Button ID="btnEnregistrer" runat="server" Text="Enregistrer" /> </asp:TableCell> </asp:TableRow> </asp:Table> <asp:Table ID="tblDetailMenu" runat="server"></asp:Table> <asp:Button ID="btnEnrDetailMenu" runat="server" Text="Enregistrer modifications" /> </ContentTemplate> </ajax:UpdatePanel>
Donc, à l'affichage on a une DDL en haut, des champs et un bouton "Enregistrer".
Juste en dessous, on a un bouton "Enregistrer modifications".
Lorsque l'on va choisir un truc dans la DDL il va y avoir une table qui va se mettre entre les deux boutons. Dans le CodeBehind, vous verrez tout cela, mais je ferais un peu de netoyage, pour que se ne soit pas imbuvable tout en gardant l'essentiel.
Voici le CodeBehind :
Le résultat que j'ai est malheuresement simple : dans la procédure du click du bouton "Enregistrer modifications" vous voyez en première ligne " Logage("biloute" & tblDetailMenu.Rows.Count)" c'est une procédure à moi qui log des choses dans un fichier texte, ça me permet de faire un debug sur mesure.
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 Partial Class Module_Gite_GestionMenu Inherits System.Web.UI.UserControl Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init Dim dtlstMenu As DataTable = New DManager("Datadev").RetournerTable("SELECT MenuGiteId, NomMenu FROM dbo.GITE_MenuTitre WHERE ApplicationId = '" & Session("SES_ApplicationStr") & "'") With ddlMenu .DataSource = dtlstMenu .DataTextField = "NomMenu" .DataValueField = "MenuGiteId" .DataBind() .Items.Insert(0, New ListItem("...", 0)) End With End Sub Protected Sub ddlMenu_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlMenu.SelectedIndexChanged Dim dtMenuTitre As DataTable = New DManager("DataDev").RetournerTable("SELECT * FROM dbo.GITE_MenuTitre WHERE MenuGiteId = '" & ddlMenu.SelectedValue & "'") txtNomMenu.Text = dtMenuTitre.Rows(0).Item("NomMenu") txtOrdreMenu.Text = dtMenuTitre.Rows(0).Item("OrdreMenu") txtTitreMenu.Text = dtMenuTitre.Rows(0).Item("TitreMenu") Dim dt As DataTable = New DManager("DataDev").RetournerTable("SELECT * FROM GITE_MenuGiteDetail WHERE MenuGiteId = '" & ddlMenu.SelectedValue & "'") For Each dr As DataRow In dt.Rows Dim r As New TableRow Dim cTexte, cOrdre As New TableCell Dim TexteMenu, OrdreMenu As New TextBox Dim hfIdDetailMenu As New HiddenField With hfIdDetailMenu .Value = dr.Item("IdMenuGiteDetail") End With With TexteMenu .Text = Replace(dr.Item("TexteMenu"), "<br />", vbCrLf) End With With OrdreMenu .Text = dr.Item("OrdreMenuGite") End With cTexte.Controls.Add(TexteMenu) cOrdre.Controls.Add(OrdreMenu) cOrdre.Controls.Add(hfIdDetailMenu) r.Cells.Add(cTexte) r.Cells.Add(cOrdre) tblDetailMenu.Rows.Add(r) Next End Sub Protected Sub btnEnrDetailMenu_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEnrDetailMenu.Click Logage("biloute" & tblDetailMenu.Rows.Count) Try For Each r As TableRow In tblDetailMenu.Rows Dim TexteMenu As TextBox = r.Cells(0).FindControl(0) Dim OrdreMenu As TextBox = r.Cells(1).FindControl(0) Dim hfIdDetailMenu As HiddenField = r.Cells(1).FindControl(1) Dim z As String = New DManager("DataDev").RetournerScalaire("UPDATE GITE_MenuGiteDetail SET TexteMenu = '" & TexteMenu.Text & "', OrdreMenu = '" & OrdreMenu.Text & "' WHERE Id = '" & hfIdDetailMenu.Value & "'") Logage("UPDATE GITE_MenuGiteDetail SET TexteMenu = '" & TexteMenu.Text & "', OrdreMenu = '" & OrdreMenu.Text & "' WHERE Id = '" & hfIdDetailMenu.Value & "'") Next Catch ex As Exception Logage(ex.Message) End Try End Sub End Class
Là, vous aurez facilement vu que je cherche à connaitre le nombre de Row dans la Table au moment du click et le nombre est 0.
Du coup, je me dis qu'il doit y avoir du PostBack dérrière tout ça, mais je sèche, je ne vois pas trés bien comment le gérer.
Pouvez vous m'aider ?
Partager