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#] Problème de formulaire dynamiques


Sujet :

ASP.NET

  1. #1
    Membre averti
    Avatar de CORBASE
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 246
    Points : 431
    Points
    431
    Par défaut [C#] Problème de formulaire dynamiques
    Bonjour,

    je vais encore sollicité l'aide du forum ...

    Je vous explique mon problème.

    Je possède une page sur laquelle il y a une TextBox et deux boutons.

    Lorsque je clique sur le premier bouton, il y a la création de N Panels (N étant le chiffre entré dans la TextBox).

    Dans ces panels, je crée des TextBox, labels et DropDownList.

    Mon soucis est le suivant, les panels se créent comme voulu, mais seulement, je n'arrive pas à valider le formulaire ainsi créé avec mon deuxième bouton.
    Je veux dire par valider, je n'arrive pas à récupérer les informations des TextBox et DropDownList que j'ai précédament créé.

    Ci-joint le code de création des panels.

    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
     
        protected void btnAjoutPH_Click(object sender, EventArgs e)
        {
            if (Page.IsPostBack)
            {
                Label monLabel = null;
                TextBox maTextBox = null;
                DropDownList maDrop = null;
                RequiredFieldValidator monValidateur = null;
     
                for (int i = 0; i < Convert.ToInt32(TextBox3.Text); i++)
                {
                    nbPhoto++;
     
                    monPanel = new Panel(); // Le panel que je veux ajouter
                    monPanel.ID = "Photo" + nbPhoto.ToString();
                    monPanel.GroupingText = "Photo N° " + nbPhoto.ToString();
     
                    // Nom de la photo
                    monLabel = new Label();
                    monLabel.Text = "<div align=left>Nom de la photo : ";
                    maTextBox = new TextBox();
                    maTextBox.ID = "T_PH" + nbPhoto.ToString() + "_name";
                    monValidateur = new RequiredFieldValidator();
                    monValidateur.ErrorMessage = "&nbsp;&nbsp;Le nom de la photo est oglibatoire !";
                    monValidateur.ControlToValidate = maTextBox.ID;
                    monPanel.Controls.Add(monLabel);
                    monPanel.Controls.Add(maTextBox);
                    monPanel.Controls.Add(monValidateur);
     
                    //Date de la photo
                    monLabel = new Label();
                    monLabel.Text = "<br>Date de la photo : ";
                    maTextBox = new TextBox();
                    maTextBox.ID = "T_PH" + nbPhoto.ToString() + "_version";
                    monPanel.Controls.Add(monLabel);
                    monPanel.Controls.Add(maTextBox);
     
                    // Commentaires
                    monLabel = new Label();
                    monLabel.Text = "<br><br>Commentaires : <br>";
                    maTextBox = new TextBox();
                    maTextBox.ID = "T_PH" + nbPhoto.ToString() + "_comment";
                    maTextBox.TextMode = TextBoxMode.MultiLine;
                    maTextBox.Height = Unit.Pixel(35);
                    maTextBox.Width = Unit.Percentage(100);
                    monPanel.Controls.Add(monLabel);
                    monPanel.Controls.Add(maTextBox);
     
                    // Distributeur
                    monLabel = new Label();
                    monLabel.Text = "<br><br>Distributeur : <br><br>";
                    monPanel.Controls.Add(monLabel);
     
                    // Organisation
                    SQL monSQL = new SQL();
                    ArrayList org = monSQL.getAllORG();
                    monLabel = new Label();
                    monLabel.Text = "Organisation : ";
                    monPanel.Controls.Add(monLabel);
                    maDrop = new DropDownList();
                    maDrop.ID = "D_PH" + nbPhoto.ToString() + "_org";
                    maDrop.Items.Add("");
                    for (int j = 0; j < org.Count; j++)
                        maDrop.Items.Add(org[j].ToString());
                    monPanel.Controls.Add(maDrop);
                    monValidateur = new RequiredFieldValidator();
                    monValidateur.ErrorMessage = "&nbsp;&nbsp;Le nom de l'organisation est oglibatoire !";
                    monValidateur.ControlToValidate = maDrop.ID;
                    monPanel.Controls.Add(monValidateur);
                    monLabel = new Label();
                    monPanel.Controls.Add(monLabel);
     
     
                    // Role
                    monLabel = new Label();
                    monLabel.Text = "<br>Role : ";
                    monPanel.Controls.Add(monLabel);
                    maDrop = new DropDownList();
                    maDrop.ID = "D_PH" + nbPhoto.ToString() + "_role";
                    maDrop.Items.Add("");
                    maDrop.Items.Add("NOATTRIBUTION");
                    maDrop.Items.Add("resourceProvider");
                    maDrop.Items.Add("custodian");
                    maDrop.Items.Add("owner");
                    maDrop.Items.Add("user");
                    maDrop.Items.Add("distributor");
                    maDrop.Items.Add("originator");
                    maDrop.Items.Add("pointOfContact");
                    maDrop.Items.Add("principalInvestigator");
                    maDrop.Items.Add("processor");
                    maDrop.Items.Add("publisher");
                    maDrop.Items.Add("author");
                    monPanel.Controls.Add(maDrop);
                    monValidateur = new RequiredFieldValidator();
                    monValidateur.ErrorMessage = "&nbsp;&nbsp;Le nom de l'organisation est oglibatoire !";
                    monValidateur.ControlToValidate = maDrop.ID;
                    monPanel.Controls.Add(monValidateur);
     
                    // Contact
                    ArrayList ct = monSQL.getAllCT();
                    monLabel = new Label();
                    monLabel.Text = "<br><br>Contact : ";
                    monPanel.Controls.Add(monLabel);
                    maDrop = new DropDownList();
                    maDrop.ID = "D_PH" + nbPhoto.ToString() + "_contact";
                    for (int j = 0; j < ct.Count; j++)
                        maDrop.Items.Add(ct[j].ToString());
                    monPanel.Controls.Add(maDrop);
                    monLabel = new Label();
                    monPanel.Controls.Add(monLabel);
     
                    // Transfert Option
                    monLabel = new Label();
                    monLabel.Text = "<br><br>Option de transfert : <br>";
                    maTextBox = new TextBox();
                    maTextBox.ID = "T_PH" + nbPhoto.ToString() + "_transfertOption";
                    maTextBox.TextMode = TextBoxMode.MultiLine;
                    maTextBox.Height = Unit.Pixel(35);
                    maTextBox.Width = Unit.Percentage(100);
                    monPanel.Controls.Add(monLabel);
                    monPanel.Controls.Add(maTextBox);
     
                    // style HTML
                    monLabel = new Label();
                    monLabel.Text = "<div>";
                    monPanel.Controls.Add(monLabel);
     
                    P_Distri.Controls.Add(monPanel); // Mon PlaceHolder
                }
            }
        }
    Voici le code du second bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected void btnValidDistributon_Click(object sender, EventArgs e)
        {
            Page.Title = P_Distri.Controls.Count.ToString();
        }
    Ce que je ne comprend pas, c'est que ma page me dit que là il n'y a aucun controle dans le PlaceHolder, alors que le premier bouton affiche bien les panels dans la PlaceHolder

    Le but de cela est de créer X champs de fomulaire afin de pouvoir remplir X panel avec des informations similaires.

    Je suis prêt à changer l'organisation de mon code et de mon application si vous savez comment faire autrement.

    Je vous remercie tous par avance !

    PS : Si je ne suis pas assez clair, dites le moi et j'essayerais de mieux expliquer.
    Rien n'est impossible, c'est juste une question de temps
    C'est quoi le PureBasic ?

  2. #2
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    sujet tres souvent traité sur le forum. Un epetite recherche s'impose...
    Mot clé : controles créés dynamiquement (par exemple)

  3. #3
    Membre averti
    Avatar de CORBASE
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 246
    Points : 431
    Points
    431
    Par défaut
    Bon après mes recherches sur le forum, il faudrait regénérer les control via la méthode INIT de la page.

    Cependant, quand on dis regénérer, il s'agit concrètement de coder quoi, on déclare de nouveaux objets ? (cela ne marche pas chez moi car il me dis qu'il existe déjà un objet portant le même identifiant).

    La je dois avouer que je brûle pour trouver la solution, mais je n'arrive pas à concrétiser tout cela.

    Bon, je vous remercie par avance !
    Rien n'est impossible, c'est juste une question de temps
    C'est quoi le PureBasic ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Salut,

    D'abord je te conseille d'essayer de résoudre ton problème avec moins de controles, genre une seule textBox, ce sera plus simple a débugger.

    Ensuite ce qu'il faut faire :

    - ecrire une fonction "CreateControl" qui se charge de créer ta TextBox, lui donner un id, l'ajouter a ton placeHolder
    - Lors du click sur ton bouton, positionner une variable de session qui indique que la textBox est à regénérer (genre Session["CreateControl"] = true) , appeler la fonction CreateControl
    - Dans l'init de ta page, faire un test, si Session["CreateControl"] = true alors appeler la méthode CreateControl

    Avec ça tu devrais pouvoir accéder à ta textBox à tous les coups , et ensuite tu essaierais avec plus de controles de la même maniere.

  5. #5
    Membre averti
    Avatar de CORBASE
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 246
    Points : 431
    Points
    431
    Par défaut
    Bon j'ai pas encore résolu mon problème initial mais grâce à vos conseils, j'arrive à regénérer mes controles.

    Sur les conseils de Sphax j'ai essayé avec une seule TextBox. Pour ce qui n'avait pas compris comme moi, je vous donne le code source de la page que j'ai faite :

    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
     
    public partial class TestGEN : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
     
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            CreateControl();
            Session.Remove("Control");
            Session.Add("Control", true);
        }
     
        protected void CreateControl()
        {
            TextBox maText = new TextBox();
            maText.ID = "merde";
            Label monLabel = new Label();
            monLabel.Text = "<br>";
            PlaceHolder1.Controls.Add(maText);
        }
        protected void PlaceHolder1_Init(object sender, EventArgs e)
        {
            if (Session["Control"] != null)
            {
                if ((bool)Session["Control"])
                    CreateControl();
            }
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            TextBox hug = (TextBox) PlaceHolder1.Controls[0];
            Response.Write(hug.Text);
        }
        protected void Button3_Click(object sender, EventArgs e)
        {
            Session.RemoveAll();
            Session.Clear();
        }
    }
    Voilà, je vous tiens au courant quand à la suite de mon problème ...
    Rien n'est impossible, c'est juste une question de temps
    C'est quoi le PureBasic ?

  6. #6
    Membre averti
    Avatar de CORBASE
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 246
    Points : 431
    Points
    431
    Par défaut
    Bon bah, en suivant le même schéma que pour une seule textbox cela marche ..

    Je ne comprend pas pourquoi ça ne marchait pas avant !

    Bref, merci @ vous TOUS !
    Rien n'est impossible, c'est juste une question de temps
    C'est quoi le PureBasic ?

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

Discussions similaires

  1. [PHP 5.3] Problème avec formulaire dynamique
    Par s4mk1ng dans le forum Langage
    Réponses: 0
    Dernier message: 23/04/2013, 11h25
  2. [AJAX] Formulaire dynamique
    Par kikou732 dans le forum AJAX
    Réponses: 0
    Dernier message: 26/12/2011, 22h23
  3. problème sur formulaire dynamique
    Par nicolasferraris dans le forum Langage
    Réponses: 4
    Dernier message: 11/03/2009, 09h10
  4. [VB.NET][WindowsForm] Problème de formulaire dynamique
    Par micfont999 dans le forum VB.NET
    Réponses: 4
    Dernier message: 31/12/2006, 01h42
  5. problème de formulaire dynamique
    Par pmboutteau dans le forum ASP
    Réponses: 9
    Dernier message: 25/10/2005, 11h32

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