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 :
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>
J'ai enlevé quelques TableRow pour faire plus léger. Elles affichent des données, sans rapport avec mon soucis.

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 :
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
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.

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 ?