IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Erreur récupération de données dans répéteur [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre éprouvé
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Billets dans le blog
    2
    Par défaut Erreur récupération de données dans répéteur
    Bonjour,

    J'ai un petit répéteur :
    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
     
     <asp:Repeater ID="rptCompteur" runat="server"  EnableViewState="true">
            <ItemTemplate>
                <br />
                <div id="divMat" runat="server" style="position: relative;">
                    <div id="divHr" runat="server">
                        <hr style="height: 5px; background-color: #000000; border: none;" />
                    </div>
                    <div style="width: 300px; float: left;">
                        <asp:Label ID="locLibCopieur" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "LibMateriel")%> '
                            CssClass="lblRefMat" ToolTip='<%# DataBinder.Eval(Container.DataItem, "Aide")%>'></asp:Label>
                    </div>
                    <div style="width: 150px; float: left;">
                        (Modèle :
                        <asp:Localize ID="locRefCopieur" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "RefMateriel")%>'></asp:Localize>
                    </div>
                    <div style="width: 200px; float: left;">
                        - Numéro de série :
                        <asp:Localize ID="locNumSer" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "NumSerie")%>'></asp:Localize>)
                    </div>
                    <br />
                    <hr style="height: 2px; background-color: #DDDDDD; border: none; left: 300px; position: absolute;
                        right: 50px;" />
                    <br />
                </div>
                <div style="left: 350px; position: absolute;">
                    <div style="width: 150px; float: left;">
                        <asp:Localize ID="locLibCompteur" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "LibCompteur")%>'></asp:Localize>
                    </div>
                    <div style="width: 150px; float: left;">
                        ancienne valeur :
                        <asp:Localize ID="locoldValue" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "OldValue")%>'></asp:Localize>
                    </div>
                    <div style="float: left;">
                        Nouvelle valeur :
                        <asp:TextBox ID="txtNewCompteur" runat="server" MaxLength="10" Columns="10"></asp:TextBox>
                        <cc2:FilteredTextBoxExtender ID="FiltreNewCompteur" runat="server" TargetControlID="txtNewCompteur"
                            FilterType="Numbers">
                        </cc2:FilteredTextBoxExtender>
                        <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="txtNewCompteur"
                            Type="Integer"></asp:RangeValidator>
                    </div>
                </div>
                <br />
            </ItemTemplate>
            <AlternatingItemTemplate>
                <div id="divMat" runat="server" style="position: relative;">
                    <br />
                    <div id="divHr" runat="server">
                        <hr style="height: 5px; background-color: #000000; border: none;" />
                    </div>
                    <div style="width: 300px; float: left;">
                        <asp:Label ID="locLibCopieur" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "LibMateriel")%> '
                            CssClass="lblRefMat" ToolTip='<%# DataBinder.Eval(Container.DataItem, "Aide")%>'></asp:Label>
                    </div>
                    <div style="width: 150px; float: left;">
                        (Modèle :
                        <asp:Localize ID="locRefCopieur" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "RefMateriel")%>'></asp:Localize>
                    </div>
                    <div style="width: 200px; float: left;">
                        - Numéro de série :
                        <asp:Localize ID="locNumSer" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "NumSerie")%>'></asp:Localize>)
                    </div>
                    <br />
                    <hr style="height: 2px; background-color: #DDDDDD; border: none; left: 300px; position: absolute;
                        right: 50px;" />
                    <br />
                </div>
                <div style="left: 350px; position: absolute; vertical-align: bottom;">
                    <div style="width: 150px; float: left;">
                        <asp:Localize ID="locLibCompteur" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "LibCompteur")%>'></asp:Localize>
                    </div>
                    <div style="width: 150px; float: left;">
                        ancienne valeur :
                        <asp:Localize ID="locoldValue" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "OldValue")%>'></asp:Localize>
                    </div>
                    <div style="float: left; height: 20px;">
                        Nouvelle valeur :
                        <asp:TextBox ID="txtNewCompteur" runat="server" MaxLength="10" Columns="10"></asp:TextBox>
                        <cc2:FilteredTextBoxExtender ID="FiltreNewCompteur" runat="server" TargetControlID="txtNewCompteur"
                            FilterType="Numbers">
                        </cc2:FilteredTextBoxExtender>
                        <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="txtNewCompteur"
                            Type="Integer"></asp:RangeValidator>
                    </div>
                </div>
                <br />
            </AlternatingItemTemplate>
        </asp:Repeater>
    Et un bouton valider juste après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <asp:Button ID="btnValider" runat="server" Text="Valider" />
    Très classic jusque là.
    Quand je clique sur Valider, je ne récupère pas mes données de mon répéteur, quelqu'un sait pourquoi?
    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
     
     Protected Sub btnValider_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnValider.Click
            Dim TxtErreur As New Text.StringBuilder
            For Each it As RepeaterItem In rptCompteur.Items
                Dim drv As DataRowView = CType(it.DataItem, DataRowView)
     
                Dim txtQte As TextBox = CType(it.FindControl("txtNewCompteur"), TextBox)
     
                If txtQte.Text.Trim.Length > 0 Then
     
                    Dim moninter As String = drv("Intervention").ToString
                    Dim inter As Intervention = Intervention.GetInter(moninter)
                    Dim li As Intervention.ligne_Operations = inter.Operations(CInt(drv("NumIntervention")))
                    li.Quantite = CInt(txtQte.Text.Trim)
                    Dim result As Boolean = inter.Modify(mess)
                    ...
                End If
            Next
     
     
        End Sub
    L'affichage de mes données : aucun problème par contre sur le clique de validation it.dataitem est à nothing et ma textebox est vide, alors que j'ai mis des valeurs

  2. #2
    Membre éprouvé
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Billets dans le blog
    2
    Par défaut trouvé
    Je crois que je devais avoir trop faim pour me concentrer correctement

    après quelques recherche un peu mieux faites, le problème est que le répéteur est un dynamique control
    Donc n'a pas vraiment d'existence dans la page (si j'ai bien compris)
    Donc si je le bind dans le Load, c'est trop tard, il ne sera pas dans le viewstate.
    Par contre, dans l'init, pas de pb:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
     
            Dim dtv As DataView = Nothing
            Dim ds As DataSet = ADX_Tools.ADX_Tools.GetCompteurImpression(ConnectedClient.IDClient)
            If ds IsNot Nothing AndAlso ds.Tables.Count > 0 AndAlso ds.Tables(0).DefaultView.Count > 0 Then
                dtv = ds.Tables(0).DefaultView
                dtv.Sort = "RefMateriel"
            End If
     
            rptCompteur.DataSource = dtv
            rptCompteur.DataBind()
     
        End Sub
    A partir de la là mes controles instanciés apparaisse dans le viewstate.
    Mais comme le répéteur n'existe pas vraiment on le dataitem est irrécupérable, donc , il faut utiliser des HiddenField pour accéder aux quelques infos utiles pour le traitement sur postBack

    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
     
     <asp:Repeater ID="rptCompteur" runat="server" EnableViewState="true">
            <ItemTemplate>
                <br />
                <div id="divMat" runat="server" style="position: relative;">
                    <div id="divHr" runat="server">
                        <hr style="height: 5px; background-color: #000000; border: none;" />
                    </div>
                    <div style="width: 300px; float: left;">
                        <asp:Label ID="locLibCopieur" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "LibMateriel")%> '
                            CssClass="lblRefMat" ToolTip='<%# DataBinder.Eval(Container.DataItem, "Aide")%>'></asp:Label>
                        <asp:HiddenField ID="HidInter" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "Intervention")%>' />
                        <asp:HiddenField ID="HidLig" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "NumIntervention")%>' />
                    </div>
                    <div style="width: 150px; float: left;">
                        (Modèle :
                        <asp:Localize ID="locRefCopieur" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "RefMateriel")%>'></asp:Localize>
                    </div>
                    <div style="width: 200px; float: left;">
                        - Numéro de série :
                        <asp:Localize ID="locNumSer" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "NumSerie")%>'></asp:Localize>)
                    </div>
                    <br />
                    <hr style="height: 2px; background-color: #DDDDDD; border: none; left: 300px; position: absolute;
                        right: 50px;" />
                    <br />
                </div>
                <div style="left: 350px; position: absolute;">
                    <div style="width: 150px; float: left;">
                        <asp:Localize ID="locLibCompteur" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "LibCompteur")%>'></asp:Localize>
                    </div>
                    <div style="width: 150px; float: left;">
                        ancienne valeur :
                        <asp:Localize ID="locoldValue" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "OldValue")%>'></asp:Localize>
                    </div>
                    <div style="float: left;">
                        Nouvelle valeur :
                        <asp:TextBox ID="txtNewCompteur" runat="server" MaxLength="10" Columns="10"></asp:TextBox>
                        <cc2:FilteredTextBoxExtender ID="FiltreNewCompteur" runat="server" TargetControlID="txtNewCompteur"
                            FilterType="Numbers">
                        </cc2:FilteredTextBoxExtender>
                        <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="txtNewCompteur"
                            Type="Integer"></asp:RangeValidator>
                    </div>
                </div>
                <br />
            </ItemTemplate>
            <AlternatingItemTemplate>
                <div id="divMat" runat="server" style="position: relative;">
                    <br />
                    <div id="divHr" runat="server">
                        <hr style="height: 5px; background-color: #000000; border: none;" />
                    </div>
                    <div style="width: 300px; float: left;">
                        <asp:Label ID="locLibCopieur" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "LibMateriel")%> '
                            CssClass="lblRefMat" ToolTip='<%# DataBinder.Eval(Container.DataItem, "Aide")%>'></asp:Label>
                        <asp:HiddenField ID="HidInter" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "Intervention")%>' />
                        <asp:HiddenField ID="HidLig" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "NumIntervention")%>' />
                    </div>
                    <div style="width: 150px; float: left;">
                        (Modèle :
                        <asp:Localize ID="locRefCopieur" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "RefMateriel")%>'></asp:Localize>
                    </div>
                    <div style="width: 200px; float: left;">
                        - Numéro de série :
                        <asp:Localize ID="locNumSer" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "NumSerie")%>'></asp:Localize>)
                    </div>
                    <br />
                    <hr style="height: 2px; background-color: #DDDDDD; border: none; left: 300px; position: absolute;
                        right: 50px;" />
                    <br />
                </div>
                <div style="left: 350px; position: absolute; vertical-align: bottom;">
                    <div style="width: 150px; float: left;">
                        <asp:Localize ID="locLibCompteur" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "LibCompteur")%>'></asp:Localize>
                    </div>
                    <div style="width: 150px; float: left;">
                        ancienne valeur :
                        <asp:Localize ID="locoldValue" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "OldValue")%>'></asp:Localize>
                    </div>
                    <div style="float: left; height: 20px;">
                        Nouvelle valeur :
                        <asp:TextBox ID="txtNewCompteur" runat="server" MaxLength="10" Columns="10"></asp:TextBox>
                        <cc2:FilteredTextBoxExtender ID="FiltreNewCompteur" runat="server" TargetControlID="txtNewCompteur"
                            FilterType="Numbers">
                        </cc2:FilteredTextBoxExtender>
                        <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="txtNewCompteur"
                            Type="Integer"></asp:RangeValidator>
                    </div>
                </div>
                <br />
            </AlternatingItemTemplate>
        </asp:Repeater>
    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
     
     Protected Sub btnValider_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnValider.Click
            Dim TxtErreur As New Text.StringBuilder
            For Each it As RepeaterItem In rptCompteur.Items
     
                Dim mess As String = ""
                Dim HidI As HiddenField = CType(it.FindControl("HidInter"), HiddenField)
                Dim HidN As HiddenField = CType(it.FindControl("HidLig"), HiddenField)
                Dim txtQte As TextBox = CType(it.FindControl("txtNewCompteur"), TextBox)
                Dim locLibC As Localize = CType(it.FindControl("locLibCompteur"), Localize)
                Dim locRef As Localize = CType(it.FindControl("locRefCopieur"), Localize)
     
                If txtQte.Text.Trim.Length > 0 Then
     
                    Dim moninter As String = HidI.Value
                    Dim inter As Intervention = Intervention.GetInter(moninter)
                    Dim li As Intervention.ligne_Operations = inter.GetOperationParNumLigne(CInt(HidN.Value))
                    li.Quantite = CInt(txtQte.Text.Trim)
                    Dim result As Boolean = inter.Modify(mess)
                    ...
                End If
            Next
     
     
        End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur récupération des données depuis base de données dans une liste
    Par amintoraa dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 25/04/2014, 23h41
  2. Réponses: 1
    Dernier message: 04/06/2006, 16h08
  3. Réponses: 16
    Dernier message: 10/11/2005, 21h10
  4. Réponses: 6
    Dernier message: 23/10/2005, 12h24
  5. récupération de données dans un TDBControlGrid
    Par dableuf dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/11/2004, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo