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 :

[C#] DropDownList dans un Table dynamiquement


Sujet :

ASP.NET

  1. #1
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut [C#] DropDownList dans un Table dynamiquement
    salut

    voilà j'ai une page aspx dans laquelle j'ai une dropdownList cachée (visible=false), un Table et 2 boutons.

    dans le Page_Load la DropDownList est chargée à partir d'une collection d'objets avec condition !IsPostBack

    bouton1 insère la DropDownList dans une nouvelle ligne du Table et rend visible = true.
    bouton2 raffaraichit la page.

    Pb:
    après avoir appuyer sur le bouton1 la DropDownList passe dans le Table, mais lorsque je sélectionne un élément de la liste et j'appuye sur bouton2
    l'élément sélectioné est perdu dès le Page_Load et la DropDownList perd sa DataSource qui est la collection.


    Comment remdier à ce problème càd récupérer l'élement sélectionné?

    Merci d'avance.

  2. #2
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 113
    Points : 128
    Points
    128
    Par défaut
    Un enabledViewState à true peut etre...

  3. #3
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut
    non ça marche pas et c'est par défaut = true le viewstate.
    je ne trouve pas la solution.

  4. #4
    Membre régulier Avatar de dupin40
    Profil pro
    Inscrit en
    Août 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    une autre petite idée :
    vérifie que si tu fais une initialisation de ta ddl tu ne la fais que lors du premier chargement de ta page ...
    après c'est le viewstate qui se chargera de mettre dernière valeur selectionné.

  5. #5
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut
    c'est ce que je fais : l'initialsiation une fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(!IsPostBck)
    {
        initialisation();
    }

  6. #6
    Membre régulier Avatar de dupin40
    Profil pro
    Inscrit en
    Août 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    Autant pour moi ....

    Par contre ta ddl est dynamiquement dans ton code ? ou pas ?
    Si c'est c'est le cas, après le postback elle ne sera pas recréé dynamiquement, il faut que dans tous les cas tu recréés ton control ddl mais cette fois ci sans l'initilialisé ni même le lier à une source de donnée c'est le viewstate qui s'en chargera.

    Résolu ?

  7. #7
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut
    en fait je vais essayer avec cette méthode là.

    ma ddl existe dans la page, mais non visible lorsque j'appuye sur un bouton elle se place dans une nouvelle ligne d'un tableau mais dès qu'il 'y a raffaraichissement elle perd toutes les données.

    elle n'est initialisée qu'une seule fois lors du page_load.

    En fait mon but c'est de créer une dropdownlist dans une ligne d'un tableau dynamiquement, récupérer une valeur sélectionnée pour récréer une nouvelle fois le tableau avec les nouvelles valeurs.
    Elle me sert pour ajouter un élément dans un tableau.

  8. #8
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut
    ça ne marche tjrs pas.

    Comment je dois procéder pour que ça fonctionne?

    merci

  9. #9
    Membre régulier Avatar de dupin40
    Profil pro
    Inscrit en
    Août 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    Avant de l'intégrer dans le tableau :

    Est ce que tu arrives a créer la liste déroulante de manière dynamique et a récupérer la valeur selectionnée après un postback ?
    Montres nous le code que tu utilises pour créer tes ddl dynamiques ....
    et le code pour les recréer après un postback (j'y pense là : il faut les meme id sinon le viewstate ne retrouvera pas la correspondance)



    aller on part pas en weekend tant que le pb n'est pas résolu .... mdr

  10. #10
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut
    - voilà le code la ddl est présente dans la page

    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
    public class test : System.Web.UI.Page
    {
    	protected System.Web.UI.WebControls.Button Button1;
    	protected System.Web.UI.WebControls.Table Table1;
    	protected System.Web.UI.WebControls.Button Button2;
                    protected System.Web.UI.WebControls.Button Button3;
    	protected System.Web.UI.WebControls.DropDownList DropDownList1;
     
    	private Personnes LesPersonnes;
     
    	private void Page_Load(object sender, System.EventArgs e)
    	{
    		LesPersonnes= (Personnes )Session["LesPersonnes"];
    		if(!IsPostBack)
    		{
    			DropDownList1.Items.Clear();
    			DropDownList1.DataSource= LesPersonnes;
    			DropDownList1.DataTextField="nom_personne";
    			DropDownList1.DataValueField="IDobject";
    			DropDownList1.DataBind();
     
    			//ajouter un item
    			ListItem Choix = new ListItem();
    			Choix.Text="Choisissez la personne";
    			Choix.Value="0";
    			DropDownList1.Items.Insert(0,Choix);
    		}
     
    		int i = DropDownList1.SelectedIndex;
    	}
     
    	//lorsque j'appuye sur ce bouton je veux récupérer la personne sélectionnée
    	//mais dans le page_Load la dropdown perd ses données après avoir appuyer sur ce bouton
    	private void Button2_Click(object sender, System.EventArgs e)
    	{
    		int i= DropDownList1.SelectedIndex;
    	}
     
    	//ajoute la ddl dans le Table1
    	private void Button1_Click(object sender, System.EventArgs e)
    	{
    		TableRow row = new TableRow();
    		TableCell cell = new TableCell();
     
    		cell.Controls.Add(DropDownList1);
    		row.Cells.Add(cell);
    		Table1.Rows.Add(row);
    	}
    	//raffarichit la page et je récupère l'élément sélectionné avant
                      insertion de la ddl dans le Table
    	private void Button3_Click(object sender, System.EventArgs e)
    	{
    		int i = DropDownList1.SelectedIndex;
    	}
    }

    J'ai esasyé de créer dynamiquement la ddl sans qu'elles soit présente initialement dans la page mais je n'arrive pas non plus.
    en fait si je recée la ddl même en IsPostBack c'est un nouveau objet et c normal qu'il soit vide donc je ne peux pas récupérer ce que j'ai séléctionné

    pour le code ci dessus lors d'un refresh je crois que la ddl est perdu vu qu'elle n'est plus dans la page mais dans le Table, j'ai essayé de recréer la ddl dans la Table mais comme j'ai dit c'est un nouvel objet donc il est vide.

  11. #11
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut
    J'ai enfin trouvé ce n'est pas une question d'id mais en fait on ne peut récupérer un élement d'une ddl dans un Table qu'après avoir redessiner le Table avec une nouvelle ddl initialisés avec les même valeurs.

    Voici le code qui fonctionne avec cette fois ci insertion dynamique de la ddl dans le Table (la ddl n'est présente initialement sur la page).

    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
    public class test : System.Web.UI.Page
    	{
    	protected System.Web.UI.WebControls.Button Button1;
    	protected System.Web.UI.WebControls.Table Table1;
    	protected System.Web.UI.WebControls.Button Button2;
    	protected System.Web.UI.WebControls.Button Button3;
     
    	private Personnes Personnes ;
     
    private void Page_Load(object sender, System.EventArgs e)
    {
                     LesPersonnes= (Personnes )Session["Personnes "];
    	if(Session["ok"]!=null)
    	{
    	DropDownList DropDownList1 = new DropDownList()		DropDownList1.Items.Clear();			DropDownList1.DataSource= LesPersonnes;
    				DropDownList1.DataTextField="nom_personne";
    				DropDownList1.DataValueField="IDobject";			DropDownList1.DataBind();			//ajouter un item
    	ListItem Choix = new ListItem();
    	Choix.Text="Choisissez la personne";
    	Choix.Value="0";
    	DropDownList1.Items.Insert(0,Choix);
     
    	Session["DropDownList1"]= DropDownList1;
     
    	TableRow row = new TableRow();
    	TableCell cell = new TableCell();
     
    	cell.Controls.Add(DropDownList1);
    	row.Cells.Add(cell);
    	Table1.Rows.Add(row);
                    //Pour tester uniquement
    	int i = DropDownList1.SelectedIndex;
    	i = DropDownList1.SelectedIndex;
    	}
     
    }
    //teste l'index sélectionné 
    private void Button2_Click(object sender, System.EventArgs e)
    {
     
        if(Session["ok"]!=null)
       {
    DropDownList DropDownList1 = (DropDownList)Session["DropDownList1"];
    int i = DropDownList1.SelectedIndex;
        }
     
    }
     
     
    //insère la ddl ds le Table
    private void Button1_Click(object sender, System.EventArgs e)
    {
    DropDownList DropDownList1 = new DropDownList();
    DropDownList1.Items.Clear();
    DropDownList1.DataSource= LesPersonnes;
    DropDownList1.DataTextField="nom_personne";
    DropDownList1.DataValueField="IDobject";
    DropDownList1.DataBind();
    //ajouter un item
    ListItem Choix = new ListItem();
    Choix.Text="Choisissez la personne";
    Choix.Value="0";
    DropDownList1.Items.Insert(0,Choix);
     
    TableRow row = new TableRow();
    TableCell cell = new TableCell();
     
    cell.Controls.Add(DropDownList1);
    row.Cells.Add(cell);
    Table1.Rows.Add(row);
    Session["ok"]=true;
    }		
     
    }
    Merci pour l'aide à+

  12. #12
    Membre régulier Avatar de dupin40
    Profil pro
    Inscrit en
    Août 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par Mourad
    en fait si je recée la ddl même en IsPostBack c'est un nouveau objet et c normal qu'il soit vide
    Comme je te l'ai dit dans mon dernier post il faut que tu nomme ton contrôle de manière a pouvoir le recréer ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DropDownList DropDownList1 = new DropDownList()
    DropDownList1.ID = "ddl1";
    DropDownList1.Items.Clear();
    et sépare la création de l'initialisation de ta ddl sinon tu ne pourras jamais récupérer la valeur sélectionné.
    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
     
    private void createDDL() 
    {
    DropDownList DropDownList1 = new DropDownList()
    DropDownList1.ID = "ddl1";
    DropDownList1.Items.Clear();
    DropDownList1.DataSource= LesPersonnes;
    DropDownList1.DataTextField="nom_personne";
    DropDownList1.DataValueField="IDobject";
    DropDownList1.DataBind();
    ....
    }
     
    // et la méthode pour initaliser 
    private void initDDL(string id)
    {
    // appelé seulement la première fois 
    id.selectedIndex=0;
    ....
    }
    Deplus on recréer les contrôles dans le PageLoad pas dans l'évènement ButtonClick() ....

  13. #13
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut
    Mon code fonctionne aussi.

    Je vais essayer avec ce code là.

    Merci encore pour l'aide
    à+

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

Discussions similaires

  1. Appliquer(pagesize)dans (display:table) dynamiquement
    Par Ymaaddi dans le forum Struts 2
    Réponses: 0
    Dernier message: 09/04/2014, 14h41
  2. Champ dynamique dans une table
    Par stef_078 dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2007, 19h09
  3. Réponses: 3
    Dernier message: 05/01/2007, 12h49
  4. Ajout/Suppression dynamique des lignes dans une table
    Par codexomega dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/08/2005, 19h50
  5. Réponses: 5
    Dernier message: 25/07/2005, 15h03

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