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énération dynamique de WebControl


Sujet :

ASP.NET

  1. #1
    Membre confirmé Avatar de flagadda
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut Génération dynamique de WebControl
    Bonjour,
    j'ai un problème un peu particulier. J'ai une base de données où sont stoquées des noms de webcontrols, tel que :
    System.Web.UI.WebControls.TextBox
    System.Web.UI.WebControls.dropdownlist
    etc ...
    Ce que je voudrais pouvoir faire, c'est à partir d'un string contenant un de ces nom, c'est générer dynamiquement ce control.

    Es-ce possible ? Avez-vous un exemple de code réalisant cette action, pour m'aider au demarrage de mon codage ?

    Merci d'avance,
    Florian

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    dsl, j'ai pas d'exemple sous la main, mais en tout cas pour moi, faut utiliser la reflexion pour faire ça.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut méthode simple
    ok il peut y avoir la reflexion mais c'est peut être une grosse machinerie...

    pourquoi ne pas simplement faire un switch sur le nom des webcontrols ?

    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    switch(nomWebControl)
    {
    case ("System.Web.UI.WebControls.TextBox"):
        TextBow newtb=new TextBox();
         ....
         Page.Controls.Add(newtb);
     
    break;
     
    ....
     
    }

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    C'est une solution mais peux être contraignant si le contenu de la BDD est mis à jour. Du coup, fo recompiler le code !!

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut non pas du tout !
    je me suis peut être mal exprimé.
    le "nomWebControl" est chargé depuis la bdd.

    par exemple avec un code du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    _Datasource = new DataTable();
    _Datasource.Locale=CultureInfo.CurrentCulture;
    SqlDataAdapter da = new SqlDataAdapter(command);
    da.Fill(_Datasource);
     
    int compteur = 0;
    while (compteur < _Datasource.Rows.Count)
    {
    nomWebControl=_Datasource.Rows[compteur]["nomWebControl"],CultureInfo.CurrentCulture)));
     
    //le switch à mettre ici
     
    compteur++;
    }

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    C'est ce que j'avais compris. Dans ta BDD ya les nom complet des contrôles à charger. Tu veux pouvoir à partir de ce nom (System.Web.UI.WebControls.DataList par exemple) créer une instance de la classe correspondante, c'est bien ça ?

  7. #7
    Membre confirmé Avatar de flagadda
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    Désolé de repondre a tout vos message si tard, mais j'ai plein de d'imprevu qui ont fait que ce projet est un peu passer à l'AS pendant une semaine.
    Merci pour ces reponses, c'est tout a fait ca que je veux faire.
    J'ai lu ta solution "cybermaxs", mais ca manque peu etre de dynamisme; à moins que je liste tout les controls existant, mais dans ce cas la, je vais "pisser" des ligne de codes qui ne serviront jamais à rien.*

    Je vais voir ce que je peux faire avec la Reflexion, mais j'ai pas trouvé d'exemple pour le moment et la doc ne court pas les rues ....

  8. #8
    Membre émérite
    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
    Par défaut
    C'est typiquement le genre de chose possible en .Net grâce aux metadata et à la réflexion. Voir la classe Activator et les méthodes CreateInstance (dont il existe une tripotée de surcharges) : http://msdn.microsoft.com/library/de...ancetopic2.asp

    mais j'ai pas trouvé d'exemple pour le moment et la doc ne court pas les rues
    Un ptit coup de rechercher ici ou de google avant d'aller sur la doc msdn , que te faut-il de plus ?

  9. #9
    Membre confirmé Avatar de flagadda
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    Je vais étudier ca de prets et je reviens

  10. #10
    Membre confirmé Avatar de flagadda
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    C'est super, mon problème est résolu.
    il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim MonObjet As Object
    Dim MonAssembly as String = "System.Web, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    Dim MonControl as String = "System.Web.UI.WebControls.TextBox"
    MonObjet = Activator.CreateInstance(MonAssembly , MonControl ).Unwrap
    et on a une belle TextBox qui va bien.

    Merci pour l'aide

    Florian

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

Discussions similaires

  1. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 17h40
  2. [VB.NET] - affichage de webcontrols dynamiquement
    Par karibouxe dans le forum ASP.NET
    Réponses: 6
    Dernier message: 15/06/2005, 11h53
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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