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 :

DropDownList dans un contrôle utilisateur


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut DropDownList dans un contrôle utilisateur
    Bonjour,
    Je me suis créé un contrôle utilisateur me permettant d'afficher une tâche. J'ai opté pour un contrôle utilisateur car il peut avoir plusieurs tâches à afficher sur une même page.

    Mon problème provient d'un DropDownList. En effet, lorsque je sélectionne un élément dans cette liste, l'évènement SelectedIndexChanged ne s'exécute pas comme il devrait le faire.

    Pourriez vous m'aider à trouver une solution svp.

    Code de mon contrôle utilisateur :
    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
    <%@ Control Language="VB" AutoEventWireup="false" ClassName="CtrlTache"
                CodeFile="CtrlTache.ascx.vb" Inherits="CtrlTache" %>
    <dt>
        <asp:table ID="test" runat="server" Width="100%">
           <asp:TableRow>
                 <asp:TableCell>Tâche attribuée à : <asp:Label ID="lblAdminTache" runat="server" text=""/></asp:TableCell>
                <asp:TableCell>Date début : <asp:Label ID="lblDatetache" runat="server" text=""/></asp:TableCell>
                <asp:TableCell>Heure début : <asp:Label ID="lblHeureTache" runat="server" text=""/></asp:TableCell>
            </asp:TableRow>
        </asp:table>
    </dt>
    <dd>
        <asp:table ID="tblInformation" runat="server" Width="100%">
            <asp:TableRow HorizontalAlign="Right">
                <asp:TableCell>
                    <div id="options" style="text-align:right">
                        Etat de la tâche : 
                        <asp:DropDownList ID="lbListeTache" runat="server" 
                                          DataSourceID="ListeEtatTache" DataTextField="ETATTALibelle" 
                                          DataValueField="ETATTAId" AutoPostBack="true">
                        </asp:DropDownList>
                        <asp:AccessDataSource ID="ListeEtatTache" runat="server" 
                                              DataFile="~/App_Data/IncidentENSAM.mdb" 
                                              SelectCommand="SELECT [ETATTAId], [ETATTALibelle] FROM [ETATTACHE] ORDER BY [ETATTAId]">
                        </asp:AccessDataSource>
                        Editer : <a href="Edit.aspx?demande=<% Response.Write(i_IdDemande) %>tache=<% Response.Write(i_IdTache) %>">
                                    <img src="../images/icones/crayon116.png" alt="Editer" title="Editer" 
                                         style="cursor:pointer; border-width:0px;" /></a>
                        Supprimer : <span style="cursor:pointer;">
                                        <asp:Image ID="imgSupprimer" ImageUrl="~/images/icones/annule16.png" runat="server" />
                                    </span>
                    </div>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow>
                <asp:TableCell ID="CellInformations" ColumnSpan="3"></asp:TableCell>
            </asp:TableRow>
        </asp:table>
     
     
    </dd>
    Code du SelectedIndexChanged :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Protected Sub EtatTacheChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles lbListeTache.SelectedIndexChanged
            Dim o_Exec As OleDbCommand
            Dim i_IdEtatTache As Integer = lbListeTache.SelectedValue
            Dim s_Requete As String
            s_Requete = "UPDATE TACHE SET TACHEEtatTache=" & i_IdEtatTache & " "
            s_Requete = "WHERE TACHEIdDemande=" & i_IdDemande & " AND TACHEId=" & i_IdTache & ""
     
            o_Exec = New OleDbCommand(s_Requete, o_SI.Connexion)
            ' il faut faire la suite
    End Sub
    Les contrôles utilisateur sont ajoutés sur une page dans un PlaceHolder via le code VB.

    Merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Ajoutes tu les contrôles dynamiquement à ta page ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je les ajoute de cette manière :
    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
    s_Requete = "SELECT TACHEIdDemande, TACHEId, ADMINISTRATEUR.ADMINNom, ADMINISTRATEUR.ADMINPrenom, TACHEInformation, TACHEDateDebut FROM ADMINISTRATEUR, TACHE WHERE TACHEIdDemande=" & i_IdDemande & "  AND ADMINISTRATEUR.ADMINIdentifiant=TACHE.TACHEIntervenant ORDER BY TACHEId DESC"
    o_Exec.CommandText = s_Requete
    RDR = o_Exec.ExecuteReader
    If RDR.HasRows Then
          ' tant qu'il y a des réponses, on les affiches
          While RDR.Read
          Dim o_Tache As New CtrlTache
          o_Tache = o_Tache.LoadControl("~/Controls/CtrlTache.ascx")
          With o_Tache
                .IdDemande = RDR.GetInt32(0)
                .IdTache = RDR.GetInt16(1)
                .Administrateur = String.Concat(RDR.GetString(2), " ", RDR.GetString(3))
                .Information = RDR.GetString(4)
                .Date = RDR.GetDateTime(5)
                .SI = o_SI
           End With
           PHTache.Controls.Add(o_Tache)
           End While
     
    Else
           'Aucunes réponses
           lblAucuneTache.Visible = True
           PHTache.Visible = False
    End If

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    C'est là le problème.
    Les contrôles ajoutés dynamiquement doivent être re-créées dans le postback pour que le viewstate fonctionne et que les events sont déclenchés.
    Le viewstate conserver l'état des contrôles, pas leur présence ou non dans la page.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je m'en doutais un peu.
    Mais dans ce cas, comment puis-je faire pour contourner ce problème ?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Il faut les recréer dans le page init suivant (et attention aux autres)...
    C'est pas super pratique, mais c'est ce qu'il faut faire avec les contrôles dynamiques.

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

Discussions similaires

  1. [3.5 C#] Lien CSS dans contrôle utilisateur web
    Par CUCARACHA dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/10/2010, 06h18
  2. Réponses: 1
    Dernier message: 21/06/2010, 11h36
  3. Réponses: 2
    Dernier message: 11/03/2010, 15h11
  4. Contrôle utilisateur dans un controle utilisateur
    Par Arsenic68 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 16/02/2010, 23h07
  5. Réponses: 3
    Dernier message: 24/04/2009, 09h01

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