none
DropdownList Enum et Postback RRS feed

  • Question

  • Bonjour à tous,
     Je dévéloppe actuellement un site en asp.net et j'ai un formulaire pour la création de compte utilisateur sur lequel j'ai deux dropdownlists contenant des valeurs provenant de type Enum. Je remplis les deux dropdownlist dans le page_load et les deux dropdownlist ont la propriété autoPostback à true. Parce que je dois afficher des champs cacher en fonction du choix de l'utilisateur si par exemple la civilité est Mme je dois lui affiché une ligne pour renseigner le nom de jeune fille.
     Les listes sont bien chargées mais lorsque j'exécute la page lorsque je fais un choix sur la liste je n'arrive pas à récupérer la valeur sélectionner par l'utilisateur lors du debbugage je me suis rendu compte de lors du la sélection le code associé à l'évènement onSelectedIndexchaged n'est pas exécuté du coup je n'ai aucun traitement qui lors du choix de l'utilisateur.
    Je vous remercie pour vos intervention par avance
    Cordialement;
    <%-- Code ascx--%>
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="RegisterMemberUsrControl.ascx.cs" Inherits="Control_RegisterControls_RegisterMemberUsrControl"   %>
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
     
     <table>
         <tr> 
            <td align="center" colspan="2">
                <asp:ScriptManager ID="asm" runat="server">
                </asp:ScriptManager>
            </td>
         </tr>
         <tr>
            <td>
             Civilit&eacute;:
            </td>
            <td>
                <asp:DropDownList ID="DDLCivilite" runat="server" 
                    onselectedindexchanged="DDLCivilite_SelectedIndexChanged" AutoPostBack="true">
                    
                </asp:DropDownList>
            </td>
         </tr>
           
            <tr align="justify">
                <td >
                 Nom:&nbsp; 
                </td>
                <td>
                    <asp:TextBox ID="tbxNomMembre" runat="server"></asp:TextBox><asp:RequiredFieldValidator
                        ID="RequiredFieldValidator1" runat="server" 
                        ErrorMessage="Votre Nom est requis" ControlToValidate="tbxNomMembre" 
                        ></asp:RequiredFieldValidator>
                </td>
            </tr>
             <tr  id="NomDeJeuneFille" runat="server">
                <td>
                  Nom de jeune fille:
                </td>
                <td>
                    <asp:TextBox ID="TbxNomDeJeuneFille" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr align="justify">
                <td>
                 Pr&eacute;nom:&nbsp;
                </td>
                <td>
                    <asp:TextBox ID="tbxPrenomMembre" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr align="justify">
                <td>
                 Site: &nbsp;
                </td>
                <td>
                    <asp:DropDownList ID="ddlSite" runat="server" DataSourceID="LinqDataSource1" 
                        DataTextField="NomSite" DataValueField="IdSite" AutoPostBack="false">
                        
                    </asp:DropDownList>
                    <asp:LinqDataSource ID="LinqDataSource1" runat="server" 
                        ContextTypeName="DataClassesDataContext" OrderBy="NomSite" 
                        Select="new (IdSite, NomSite)" TableName="Sites">
                    </asp:LinqDataSource>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="ddlSite" ErrorMessage="Vous devez selectionner votre site " ></asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr align="justify">
                <td>
                   Num&eacute;ro de telephone L'Or&eacute;al<br />
    &nbsp;ou mobile pour le personnel de route:
                </td>
                <td>
                    <asp:TextBox ID="tbxNumero" runat="server" MaxLength="10"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" 
                        ControlToValidate="tbxNumero" 
                        ErrorMessage="Votre numéro de téléphone est requis " ></asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr align="justify">
                <td>
                Num&eacute;ro de bureau:
                </td>
                <td>
                    <asp:TextBox ID="tbxNumBureau" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr align="justify">
                <td>
                    Contrat:
                </td>
                <td>
                    <asp:DropDownList ID="ddlContrat" runat="server" AutoPostBack="True" 
                        onselectedindexchanged="ddlContrat_SelectedIndexChanged">
                    </asp:DropDownList>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" 
                        ControlToValidate="ddlContrat" 
                        ErrorMessage="le type de contrat qui vous lie au groupe est requis" 
                        ></asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr align="center">
                <td>
                    Date d&acute;entr&eacute;e dans le groupe:
                </td>
                <td>
                    <asp:TextBox ID="TbxDate" runat="server"></asp:TextBox>
                    <cc1:CalendarExtender ID="CalendarEnterDate"
                        runat="server" Animated="true" TargetControlID="tbxDate" Format="dd/MM/yyyy">
                    </cc1:CalendarExtender>
                    <asp:RequiredFieldValidator ID="RFVEnterDate" runat="server" ErrorMessage="Votre date d'entrée dans le groupe est requise" ControlToValidate="tbxDate" ></asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr id="sortie" runat="server" align="justify">
                <td>
                  Date d'expiration: &nbsp;
                </td>
                <td>
                    <asp:TextBox ID="TbxEndDate" runat="server"></asp:TextBox>
                    <cc1:CalendarExtender ID="CalendarEndDate" runat="server" TargetControlID="TbxEndDate" Animated="true" Format="dd/MM/yyyy">
                    </cc1:CalendarExtender>
                    
                    <%--<asp:Calendar ID="CldrSortie" runat="server" BackColor="White" 
                        BorderColor="White" BorderWidth="1px" Font-Names="Verdana" Font-Size="9pt" 
                        ForeColor="Black" Height="190px" NextPrevFormat="FullMonth" Width="350px" 
                      >
                        <SelectedDayStyle BackColor="#333399" ForeColor="White" />
                        <TodayDayStyle BackColor="#CCCCCC" />
                        <OtherMonthDayStyle ForeColor="#999999" />
                        <NextPrevStyle Font-Bold="True" Font-Size="8pt" ForeColor="#333333" 
                            VerticalAlign="Bottom" />
                        <DayHeaderStyle Font-Bold="True" Font-Size="8pt" />
                        <TitleStyle BackColor="White" BorderColor="Black" BorderWidth="4px" 
                            Font-Bold="True" Font-Size="12pt" ForeColor="#333399" />
                    </asp:Calendar>--%>
                    
                </td>
                       </tr>
                       <tr>
                            <td align="center" colspan="2">
                                <asp:CompareValidator ID="CVEnterNEndDate" runat="server" ErrorMessage="la date d'entrée doit être inférieur à la date date de sortie" Type="Date" ControlToCompare="tbxDate" ControlToValidate="TbxEndDate" Operator="GreaterThan"></asp:CompareValidator>
                            </td>
                       </tr>
                       <tr>
                       <td align="center" colspan="2"> 
                           <asp:Label ID="Label1" runat="server"></asp:Label></td>
                         <%--<td align="center" colspan="2">
                             <asp:CompareValidator ID="CVEnterDate" runat="server" ErrorMessage="La date d'entrée doit être la du jour" ControlToValidate="tbxDate" Type="Date" ></asp:CompareValidator> 
                         </td>--%>
                       </tr>
                       
                       <tr>
                            <td align="center" colspan="2">
                                
                                <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Numero de poste(5 Chiffres) ou mobile(10 Chiffres)" ValidationExpression="^(([0-9]{5})|((06)[0-9]{8}))$" ControlToValidate="tbxNumero" ></asp:RegularExpressionValidator>
                         
                            </td>
                       </tr>
                       <tr>
                            <td align="center" colspan="2">
                                <asp:ValidationSummary ID="ValidationSummary1" runat="server" 
                                    DisplayMode="List" ShowSummary="true" ShowMessageBox="true"  
                                    ToolTip="Zone d'erreur" />
                            </td>                  
                       </tr>
             </table>
    
    <%-- Code ascx.cs--%>
    
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Collections.Generic;
    
    public partial class Control_RegisterControls_RegisterMemberUsrControl : System.Web.UI.UserControl
    {
        private Membre _Membre;
        protected void Page_Load(object sender, EventArgs e)
        {
            DDLCivilite.DataSource = Enum.GetNames(typeof(Civilite));
            DDLCivilite.DataBind();
            ddlContrat.DataSource = Enum.GetNames(typeof(Contrat));
            ddlContrat.DataBind();
    
            if (!IsPostBack)
            {
                NomDeJeuneFille.Visible = false;
                sortie.Visible = false;
            }
                
            else
            {
                ddlContrat.SelectedValue=Convert.ToString( Cache["SlctContrat"]);
            }
            
            
            
        }
        
        protected void ddlContrat_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            if (!((DropDownList)sender).SelectedValue.Equals("CDI"))
            {
                sortie.Visible = true;
            }
            else
            {
                sortie.Visible = false;
            }
            Cache["SlctContrat"] = ((DropDownList)sender).SelectedValue;
          
        }
        /// <summary>
        /// Méthode d'enregistrement d'un membre
        /// </summary>
        public void enregistrerMembre()
        {
           // on initialise le membre.
            _Membre= new Membre(){
                UserId=this.UserId,
                IdSite=this.IdSIte,
                DateDebutContrat=this.DateEntree,
                DateFinContrat=this.DateSortie,
                Contrat=(Contrat)this.TypeContrat,
                Civilite=(Civilite)this.CiviliteDuSalarie,
                NomDeJeuneFille=this.NomDejeune,
                 NomMembre=this.NomMembre,
                 PrenomMembre=this.PrenomMembre,
                 NumeroTelephone=this.NumeroTelephone,
                 NumeroDeBureau=this.Bureau};
            
            GestionnaireMembres.creerUnMembre(_Membre);
            
           
    
        }
        #region Propriétés
    
        public Guid UserId { get; set; }
        
        public String NomMembre 
        {
            get
            {
              return tbxNomMembre.Text  ;
            }
            set
            {
             tbxNomMembre.Text=value   ;
            }
        }
    
        public String PrenomMembre
        {
            get
            {
              return tbxPrenomMembre.Text  ;
            }
            set
            {
                tbxPrenomMembre.Text=value;
            }
        }
        public int IdSIte {
            get
            {
              return int.Parse(ddlSite.SelectedValue)  ;
            }
            set
            {
                int param = value;
                ddlSite.SelectedValue = param.ToString();
            }
        }
    
        public int NumeroTelephone {
            get
            {
             return int.Parse(String.Concat(String.Format("{0}",tbxNumero.Text)));
            }
            set
            {
                ;
            }
        }
        public String Bureau {
            get
            {
             return tbxNumBureau.Text   ;
            }
            set
            {
                ;
            }
            
            }
        public Civilite TypeContrat
        {
            get
            {
    
                return (Civilite)int.Parse(ddlContrat.SelectedValue);
            }
            set
            {
                ;
            }
        }
        public DateTime DateEntree {
            get
            {
                return DateTime.Parse(TbxDate.Text);
                //return DateTime.Parse(String.Format("{0}/{1}/{2}",CldrDateEntree.SelectedDate.Day, CldrDateEntree.SelectedDate.Month, CldrDateEntree.SelectedDate.Year));
            }
            set
            {
               ;
            }
                }
        public Nullable<DateTime> DateSortie {
            get
            {
                return DateTime.Parse(TbxEndDate.Text);
                //return DateTime.Parse(String.Format("{0}/{1}/{2}",CldrSortie.SelectedDate.Day,CldrSortie.SelectedDate.Month,CldrSortie.SelectedDate.Year));
            }
            set
            {
               ;
            }
        }
    
        /// <summary>
        /// Permet de stocker le nom de connexio encore appelé FR dans notre application;
        /// </summary>
        public String NomDeConnexion { get; set; }
    
        /// <summary>
        /// Cette propriété retourne le nom de jeune de l'utilisateur si celui -ci est une dame.
        /// </summary>
        public String NomDejeune {
            get
            {
             return TbxNomDeJeuneFille.Text;
            }
            set
            {
             TbxNomDeJeuneFille.Text=value;
            }
        }
    
        public Civilite CiviliteDuSalarie {
            get
            {
                return (Civilite)int.Parse(DDLCivilite.SelectedValue);
            }
            set
            {
              ;
            }
            }
    
        #endregion;
        protected void CldrDateEntree_SelectionChanged(object sender, EventArgs e)
        {
            
        }
        
        protected void DDLCivilite_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (((DropDownList)sender).SelectedValue.Equals("Mme"))
            {
                //on affiche la zone d'enregistrement du nom de Jeune fille;
                NomDeJeuneFille.Visible = true;
            }
            else
            {
                //cacher le nom de Jeune Fille
                NomDeJeuneFille.Visible = false;
    
            }
        }
    }
    
        
    mercredi 9 septembre 2009 18:25

Réponses

  • Bonjour,

    Corrigez le code suivant :

    if (!IsPostBack)
    {
          DDLCivilite.DataSource = Enum.GetNames(typeof(Civilite));
          DDLCivilite.DataBind();
          ddlContrat.DataSource = Enum.GetNames(typeof(Contrat));
          ddlContrat.DataBind();
    
          NomDeJeuneFille.Visible = false;
          sortie.Visible = false;
    }        
    else
    {
            ddlContrat.SelectedValue=Convert.ToString( Cache["SlctContrat"]);
    }
    

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    dimanche 13 septembre 2009 08:25
    Modérateur

Toutes les réponses

  • Bonjour,

    Pouvez-vous m'envoyer un exemple de code qui pose problème sur gilles.tourreau@pos.fr (en ajoutant dans l'e-mail, le lien concernant cette conversation) ?

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    mercredi 9 septembre 2009 22:26
    Modérateur
  • Bonjour,

    Corrigez le code suivant :

    if (!IsPostBack)
    {
          DDLCivilite.DataSource = Enum.GetNames(typeof(Civilite));
          DDLCivilite.DataBind();
          ddlContrat.DataSource = Enum.GetNames(typeof(Contrat));
          ddlContrat.DataBind();
    
          NomDeJeuneFille.Visible = false;
          sortie.Visible = false;
    }        
    else
    {
            ddlContrat.SelectedValue=Convert.ToString( Cache["SlctContrat"]);
    }
    

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    dimanche 13 septembre 2009 08:25
    Modérateur
  • J'avais essayé votre méthode avant de faire le post pour ce thread.  J'ai aussi trouver la raison pour laquelle mes dropdownlist ne fonctionnaient pas elles sont entrées en conflit lors du postback du coup la solution est d'utiliser un updatepanel avec trigger sur les deux listes déroulantes.
     Je vous remercie encore pour votre aide.
    Cordialement;
    dimanche 13 septembre 2009 23:24