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 :

Parser un controle à partir d'une classe externe


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Parser un controle à partir d'une classe externe
    Salut tout le monde.

    Là je m'attaque à un truc qui me parait super balaise.

    J'ai fabriqué un ASCX (un contrôle utilisateur) et je voudrais le mettre en oeuvre à partir d'une classe externe. Je pense qu'en mettant du code je vais être plus explicite.

    J'ai un ASCX (un autre puisque tout mon site repose sur l'utilisation des ASCX.) dans lequel je monte une grosse ASP:Table. Dans chaque cellule je charge des contrôles (TextBox, dropDownList, ...). ça fait un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    With cellChamp
                    .Controls.Add(FormulairX.AjouterChamp("EXEC dbo.SITE_DefinitionChampFormulaire " & champ("Id_ChampFormulaire")))
                    .ID = "cell" & champ("Nom_Champ")
                    .CssClass = "FORM_CelChamp"
    End With
    cellChamp étant une cellule de la Table (asp:TableCell) qui acceuille un contrôle donné.
    la Fonction AjouterChamp de ma classe FormulaireX prends une requête SQL comme paramettre car avec le résultat de cette requête elle va tout faire. En voici le 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
     
    Public Shared Function AjouterChamp(ByVal rqDefinitionChamp As String) As Control
                Dim dtDefinitionChamp As DataTable = New DManager("DataDev").RetournerTable(rqDefinitionChamp)
     
                Select Case dtDefinitionChamp.Rows(0).Item("Type_Champ")
                    Case "txt"
                        Dim ChampText As New TextBox
                        With ChampText
                            .Text = dtDefinitionChamp.Rows(0).Item("Param_Text1")
                            .ID = dtDefinitionChamp.Rows(0).Item("Type_Champ") & dtDefinitionChamp.Rows(0).Item("Nom_Champ")
                            .Width = Unit.Pixel(dtDefinitionChamp.Rows(0).Item("Param_Num1"))
                        End With
                        Return ChampText
     
                    Case "dac"
                        Dim dac As New Control
                        dac.Controls.Add(New System.Web.UI.WebControls.par)
     
     
                    Case Else
                        Dim ChampText As New TextBox
                        ChampText.Text = "sais pas"
                        Return ChampText
                End Select
            End Function
    Je vous ai pas mis tous les Case, l'idée c'est de voir le plus simple avec une TextBox, amis j'ai d'autre case qui font des trucs pas possible, genre deux DropDownList pour faire une recherche entre deux bornes dans la base.

    Là où je cale c'est sur le Case "dac". J'ai laissé mon cod ene cours car je ne sais pas trop quoi mettre. L'idée c'est de dire que je vais chercher mon ASCX qui s'appelle "DropDownAutoComplete" avec une chaine du genre :
    <CompoSiteropDownAutoComplete ID="dac1" runat="server"/>
    J'arrive à faire ça lorsque je suis dans un ASCX côté CodeBehind parce que j'utilise la fonction ParseControl de System.Web.UI.TemplateControl. Mais là, dans ma classe externe, j'arrive pas à l'appeller.

    Je pense bien que c'est aprce que je maitrise encore mal le concept objet et que ça doit être tout couillon à faire, mais je sèche.

    Pouvez vous m'aider ?

  2. #2
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    J'ai avancé. Je sais pas si c'est prce que c'est Vendredi ou parce que le soleil veux pas se montrer aujourdh'ui, mais j'ai fini par trouve comment mettre le ParseControl. ça doit être une des combinaisons que j'avais pas essayé.

    Voici donc le code qui n'est pas rejeté apr VS 2008 (je dit ça, aprce que aprés j'ai un autre souci qui doit être lié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    Case "dac"
                        Dim dac As New Control
                        dac.TemplateControl.ParseControl("<CompoSite:DropDownAutoComplete ID='dac1' runat='server'/> ")
                        Return dac
    J'ai remis que le Case "dac", histoire de pas trop charger.

    Alors maintenant, sur la page il me dit un truc pas sympa :
    La référence d'objet n'est pas définie à une instance d'un objet.
    Mais j'ai fait un New pourtant. Je comprends pas où est il veut que j'aille chercher la référence cette fois.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    A priori c'est TemplateControl qui vaut Nothing

    Essaie plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    Case "dac"
                        Dim dac As Control = Me.ParseControl("<CompoSite:DropDownAutoComplete ID='dac1' runat='server'/> ")
                        Return dac

  4. #4
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci Tomlev

    Je viens d'essayer ta propositoin et il me retourne ce message :
    'Me' est valide uniquement dans une méthode d'instance.
    Je pense que le fait d'être dans une classe externe modifie les accés par rapport au fait d'être directement dans un ASPX ou un ASCX.
    J'ai essayé de passer par le Context, qui m'a donné de bons résultat par le passé sur la récupération de l'URL(par exemple) Mais j'y arrive pas non plus.

    Une autre idée ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    remplace Me par une référence à la page (ou au usercontrol) dans laquelle tu veux créer le contrôle

  6. #6
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide.

    L'ennui c'est que je ne vois pas comment je peux faire ça. Ma Fonction retourne justement un contrôle et elle est appelée de façon dynamique, donc si je rajoute une truc dedans, une référene ou un simple paramètre il faut que je fasse pour tous les contrôle que je retourne.

    Et même là, j'ai du mal à comprendre.

    Tu peux m'aiguiller un peu plus ?
    Veux tu que je poste plus de code que ce que j'ai déjà fait, histoire d'avoir un vision plus globale de la chose ?

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

Discussions similaires

  1. Accéder à un UIElement à partir d'une classe externe
    Par tom741 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 02/12/2009, 20h51
  2. SetText d'un JTextField à partir d'une classe externe
    Par Zak Blayde dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 15/11/2008, 21h12
  3. Probleme affichage Clip addchild à partir d'une classe externe
    Par Niokizou dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 23/04/2008, 15h53
  4. Réponses: 12
    Dernier message: 03/11/2005, 18h45
  5. [EJB][JONAS] EJB utilisant une classe "externe"
    Par Gregory3000 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 13/12/2004, 19h57

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