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 :

ASP.NET GridView avec DropDownList et DataSourceID multiples


Sujet :

ASP.NET

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 133
    Par défaut ASP.NET GridView avec DropDownList et DataSourceID multiples
    Bonjour,
    J'ai une question un peu délicate car je suis entrain d'effectuer des recherches sur une solution possible à un problème que je rencontre :
    Je voudrais afficher une liste de ComboBox dont je ne connais pas par avance le nombre exacte, alors j'ai pensé à un asp:GridView avec une colonne Template qui va héberger un DropDownList, jusque là aucune difficulté à noter.
    MAIS, est-il possible de faire en sorte que pour chaque ligne que je vais créer manuellement dans le code, le DropDownList ait une source de données individuelle ?
    Je m'explique, par l'approche classique, que ce soit en remplissant à la main ma DropDownList par des ListItem ou par un DataSourceID, toutes mes DropDownList auront les mêmes données, logique ! Et c'est justement là où je voudrais agir, pour chaque ligne, pouvoir assigner une source de données différente à mon DropDownList...
    Si vous avez une idée dessus ou alors une toute autre suggestion, je suis preneur. Merci par avance !
    Nachtigal!!

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 133
    Par défaut
    En recherchant ici et là au cas où, je me suis dit que je pourrais tout aussi bien ajouter mes DropDownList dynamiquement dans un control Panel, tout simplement. Par contre pour styler le tout en CSS c'est pas gagné !!
    Je continue mes investigations !!

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 37
    Par défaut
    Salut en le créant à la main une gridview de 2 lignes, tu peux regarder si c'est faisable d'avoir 2 ddl de source différente.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 220
    Par défaut
    Ce que tu veux faire doit être possible. Je suppose que ce que tu veux c'est que les DDL ait la même source de données mais avec des paramètres différents. C'est à dire la même requête mais en prenant des données relatives à la ligne de la GV ou se situe la DDL?

    Si tel est le cas, niveau perf, ca va pas être terrible puisque pour chaque ligne de ta GV tu vas faire une requête. Mais tu peux le faire dans la méthode OnDataBound() de ta GV. Il te faudra sûrement utiliser findcontrol() pour accéder à tes DDL et les alimenter.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 133
    Par défaut
    Je vous remercie pour vos contributions.
    papouuu, c'est effectivement faisable en interceptant l'événement OnDataBound, mais c'est une prise de tête inutile pour les résultats obtenus.
    Alors j'ai changé les données du problème pour pouvoir le résoudre, car finalement on peut donner l'illusion de ligne de table en générant son code à la volée, c'est la piste que j'ai poursuivie...
    Dans une Web Application, tu mets ceci dans la partie Html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <asp:Panel ID="MainPanel1" runat="server" GroupingText="Panels imbriqués et plusieurs Combox dynamiques">
        </asp:Panel>
    et dans le code behind tu colles ce 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
     
    public partial class WebForm3 : System.Web.UI.Page
        {
            private int nbrpanels = 2;
     
            private String[] list1 = { "stanley", "florence", "capuccins", "gutenberg", "limbe" };
            private String[] list2 = { "moneurone", "jesuites", "nachtigal" };
            private String[] list3 = { "logone", "adzap", "benoue", "zoulou", "mezali" };
            private String[] list4 = { "HiddenField", "Calendar", "ImageMap", "Label", "Literal" };
     
            protected void Page_Load(object sender, EventArgs e)
            {
     
            }
     
            protected override void OnInit(EventArgs e)
            {
                base.OnInit(e);
     
                //on génère nos controls dans une boucle!!
                for (int k = 1; k <= nbrpanels; k++)
                {
                    //ns avons un idx en ligne
                    DropDownList ddl = new DropDownList() { ID = "ddl" + k.ToString(), AutoPostBack = true };
                    ddl.Style["width"] = "240px";
                    //ddl.Style["padding-right"] = "15px";
                    ddl.Style["padding-left"] = "5px";
                    //ddl.CssClass
     
                    //source de données propre à ce Control!!
                    switch (k)
                    {
                        case 1:
                            ddl.DataSource = list1;
                            break;
                        case 2:
                            ddl.DataSource = list2;
                            break;
                        case 3:
                            ddl.DataSource = list3;
                            break;
                        default:
                            break;
                    }
     
                    ddl.DataBind();
     
                    ddl.SelectedIndexChanged += new EventHandler(OnSelectedIndexChanged);
     
                    //on met le titre du combox, en réalité est fourni par une propriété de l'objet
                    Label titre = new Label();
                    titre.Text = "Combox " + k.ToString(); 
     
                    //on met un label pour les comptes-rendus
                    Label label = new Label();
                    label.ID = "Label" + k.ToString();
                    label.Style["padding-left"] = "15px";
                    //label.CssClass
     
                    //on met tout ça dans un Panel dynamique
                    Panel panel = new Panel();
                    panel.ID = "Panel" + k.ToString();
     
                    panel.Controls.Add(titre);
                    panel.Controls.Add(ddl);
                    panel.Controls.Add(label); 
     
                    //puis on intègre le tout dans le MainPanel!!
                    MainPanel1.Controls.Add(panel);
                    MainPanel1.Controls.Add(new LiteralControl("<br/>"));
                }
            }
     
            protected void OnSelectedIndexChanged(object sender, EventArgs e)
            {
                //quel dropdownlist a émis l'evnmt??
                DropDownList ddl = (DropDownList)sender;
                string currentID = ddl.ID; 
                //isoler le (k) !! 
                string s1 = currentID.Substring(3);
                int k = Convert.ToInt32(s1); 
     
                //pointer le "bon" panel!!
                Panel panel1 = (Panel)MainPanel1.FindControl("Panel" + s1);
                if (panel1 != null)
                {
                    //récupérer le control
                    Label label = (Label)panel1.FindControl("Label" + s1);
                    if (label != null)
                    {
                        label.Text = "Et le gagnant est : " + ddl.SelectedValue;
                    }
                }
            }
        }
    Bon, je ne m’étends pas sur le pourquoi de certains choix, google, mais au final, chaque panel enfant me donne l'illusion d'une ligne de table... En stylisant cela avec du CSS on peut avoir un formatage correct.
    Je récupère en fait de la base de données à travers ma Factory le 'nbrpanels' et chaque objet selon son type m'oriente vers la bonne source de données à charger ; mais pour le test j'ai simplifié avec des listes fixes...
    Le point important est la manipulation en "aveugle" des Controls insérés à la volée !!
    Voilà, si ça peut intéresser quelqu'un d'autre !!
    nachtigal !!

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 133
    Par défaut
    Finalement j'ai trouvé la réponse au problème initialement posé, en changeant légèrement la définition : Au lieu d'un GridView, il fallait plutôt générer des HtmlTableRow qu'on ajoute dynamiquement à un Table qui lui est fixe au lieu du panel...
    la solution se trouve évoqué sur ce lien
    Avec cela j'ai toutes les possibilités de génération dynamique de code.
    nachtigal!!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/08/2011, 16h41
  2. [ASP.net][GridView] Probleme sur un update
    Par jeromechezgdf dans le forum ASP.NET
    Réponses: 6
    Dernier message: 31/05/2007, 17h23
  3. Réponses: 1
    Dernier message: 23/04/2007, 15h07
  4. [C# et Asp.net] Lier 2 dropdownlist
    Par misscricri dans le forum ASP.NET
    Réponses: 2
    Dernier message: 26/02/2007, 14h08
  5. [ASP.Net/GridView] Comment effectuer une jointure ?
    Par nikalkal dans le forum Accès aux données
    Réponses: 3
    Dernier message: 20/07/2006, 09h05

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