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 :

[Gérer des controles dynamiquement] Conseils d'implémentation


Sujet :

ASP.NET

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Par défaut [Gérer des controles dynamiquement] Conseils d'implémentation
    Bonjour,

    J'aimerais savoir si une meilleure implémentation de ce que je veux faire existe (probablement que oui ). Mise en situation :

    J'ai une liste de catégories que j'affiche dans une BulletedList à partir d'une base de données. Sur le clic d'un élément dans la liste je souhaite créer une série de contrôles à partir d'informations de la base de données telles que le type (TextBox, DropDownList, CheckBoxList, RadioButtonList), une position ordonnée, une valeur par défaut, etc... En ce moment, j'arrive à créer les contrôles que j'attache à un PlaceHolder dans ma page ASPX.

    Le problème survient quand j'appuie sur le bouton pour sauvegarder les informations du formulaire créé dynamiquement dans la base de données. En effet, tous mes contrôles créés dynamiquement disparaissent et je n'ai plus accès à l'information qu'ils contenaient...

    Quelle est la bonne façon de faire ce que j'ai décris?

    ** Si quelqu'un pouvait aussi m'éclairer sur le fait que les variables globales à ma classe sont réinitialisées à tous les PostBack, de ce fait, il m'est impossible de conserver une valeur... On doit utiliser le ViewState pour ce faire? **

    Voici mon code :

    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
     
    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using ChecklistsPortal.Lib.BusinessObjects;
     
    namespace ChecklistsPortal
    {
        public partial class WebChanges : System.Web.UI.Page
        {
            private FeatureTypeCollection featColl = FeatureTypeCollection.GetAll();
     
            protected void Page_Load(object sender, EventArgs e)
            {
                loadFeatureTypesList();
            }
     
            private void loadFeatureTypesList()
            {
                blFeatureTypes.DataSource = featColl;
                blFeatureTypes.DataTextField = "FeatureTypeName";
                blFeatureTypes.DataValueField = "FeatureTypeId";
                blFeatureTypes.DataBind();
            }
     
            private void loadTemplateFieldsList(int featureTypeId)
            {
                TemplateFieldCollection temfColl = TemplateFieldCollection.GetByFeatureId(featureTypeId);
     
                foreach (TemplateFieldBO temf in temfColl)
                {
                    WebControl wcFieldType = null;
     
                    if (temf.FieldType.FieldTypeName == "TextBox")
                    {
                        wcFieldType = new TextBox();
                        wcFieldType.ID = "txtTemplateField_" + temf.TemplateFieldId;
                    }
                    else if (temf.FieldType.FieldTypeName == "DropDownList")
                    {
                        wcFieldType = new DropDownList();
                        wcFieldType.ID = "ddlTemplateField_" + temf.TemplateFieldId;
     
                        ((DropDownList)wcFieldType).Items.Add(new ListItem(temf.TemplateFieldValue, temf.TemplateFieldId.ToString()));
     
                        foreach (TemplateFieldBO temfChild in temf.TemplateFieldChildren)
                        {
                            ((DropDownList)wcFieldType).Items.Add(new ListItem(temfChild.TemplateFieldValue, temfChild.TemplateFieldId.ToString()));
                        }
                    }
                    else if (temf.FieldType.FieldTypeName == "CheckBoxList")
                    {
                        wcFieldType = new CheckBoxList();
                        wcFieldType.ID = "cblTemplateField_" + temf.TemplateFieldId;
     
                        foreach (TemplateFieldBO temfChild in temf.TemplateFieldChildren)
                        {
                            ((CheckBoxList)wcFieldType).Items.Add(new ListItem(temf.TemplateFieldValue, temf.TemplateFieldId.ToString()));
                        }
                    }
                    else if (temf.FieldType.FieldTypeName == "RadioButtonList")
                    {
                        wcFieldType = new RadioButtonList();
                        wcFieldType.ID = "rblTemplateField_" + temf.TemplateFieldId;
     
                        foreach (TemplateFieldBO temfChild in temf.TemplateFieldChildren)
                        {
                            ((RadioButtonList)wcFieldType).Items.Add(new ListItem(temf.TemplateFieldValue, temf.TemplateFieldId.ToString()));
                        }
     
     
     
                    }
     
                    if (wcFieldType != null)
                    {
                        Label lblFieldName = new Label();
                        lblFieldName.ID = "lblTemplateField_" + temf.TemplateFieldId;
                        lblFieldName.Text = temf.TemplateFieldName + " :";
                        lblFieldName.AssociatedControlID = wcFieldType.ID;
     
                        LiteralControl listItem = new LiteralControl("<li>");
                        LiteralControl divContainer = new LiteralControl("<div>");
                        LiteralControl divContainerClose = new LiteralControl("</div>");
                        LiteralControl listItemClose = new LiteralControl("</li>");
     
                        phTemplateFields.Controls.Add(listItem);
                        phTemplateFields.Controls.Add(divContainer);
                        phTemplateFields.Controls.Add(lblFieldName);
                        phTemplateFields.Controls.Add(wcFieldType);
                        phTemplateFields.Controls.Add(divContainerClose);
                        phTemplateFields.Controls.Add(listItemClose);
                    }
                }
            }
     
            private void saveModificationsWeb()
            {
                // Sauvegarder les informations
                // Les controles n'existent plus rendu ici, alors c'est impossible!!
            }
     
            protected void blFeatureTypes_Click(object sender, BulletedListEventArgs e)
            {
                loadTemplateFieldsList(featColl[e.Index].FeatureTypeId);
            }
     
            protected void btnSaveTemplateFields_Click(object sender, EventArgs e)
            {
                saveModificationsWeb();
            }
        }
    }
    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
     
    <%@ Page Title="" Language="C#" MasterPageFile="~/ChecklistsPortal.Master" AutoEventWireup="true" CodeBehind="WebChanges.aspx.cs" Inherits="ChecklistsPortal.WebChanges" %>
     
    <asp:Content ID="ContentHead" ContentPlaceHolderID="head" runat="server">
    </asp:Content>
    <asp:Content ID="ContentBody" ContentPlaceHolderID="contentMasterPage" runat="server">
        <div>
            <asp:Label ID="lblSelectFeatureType" runat="server" Text="Select a feature type : "></asp:Label>
            <asp:BulletedList runat="server" 
                ID="blFeatureTypes" 
                DisplayMode="LinkButton" 
                onclick="blFeatureTypes_Click">
            </asp:BulletedList>
        </div>
        <div>
            <asp:UpdatePanel ID="upTemplateFields" runat="server">
                <ContentTemplate>
                    <asp:Label ID="Label1" runat="server" Text="0"></asp:Label>
                    <ul>
                        <asp:PlaceHolder ID="phTemplateFields" runat="server"></asp:PlaceHolder>
                    </ul>
                    <asp:Button ID="btnSaveTemplateFields" runat="server" Text="Save" 
                        onclick="btnSaveTemplateFields_Click" />
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="blFeatureTypes" EventName="Click" />
                </Triggers>
            </asp:UpdatePanel>
        </div>
    </asp:Content>
    Images attachées Images attachées   

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/08/2006, 23h54
  2. [PHP-JS] Gérer des listBox dynamiquement
    Par joquetino dans le forum Langage
    Réponses: 5
    Dernier message: 11/07/2006, 16h57
  3. [FLASH 8] gérer des boutons dynamiquement
    Par gregooo dans le forum Flash
    Réponses: 1
    Dernier message: 04/02/2006, 21h22
  4. Réponses: 6
    Dernier message: 18/04/2005, 21h12

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