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 :

Tripoper le type d'un objet


Sujet :

ASP.NET

  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 Tripoper le type d'un objet
    Bonjour

    Je suis en train de mettre au point un eptit procédure pour charger les listes déroulante, bouton radio et autre case à cocher.

    Je voudrais faire une procédure un peu "universelle". Je compte lui envoyer deux paramettres :
    - un Object qui sera la liste à remplir
    - une requête qui servira à fabriquer une DataTable pour placer les données.

    Mais voilà, j'ai un souci avec le type. Je voudrais pouvoir transtyper la bestiole au début de Procédure, amus j'arrive pas à trouver le moyen de récupérer son type pour l'envoyer en paramettre du Ctype.

    Pour l'instant le fais ma Procédure comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sub RemplirListe(ByVal lst As Object, ByVal rq As String)
    Ce que j'arrive pas à faire c'est un truc comme ça : (attention, le code est foireux)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim lstTempo as "le type que je capte de l'objet lst" = lst
    Pouvez vous m'aider ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Par défaut
    tu a regarder du coté des ObjectDataSource c'est à mon avis ce que tu essais de faire

    http://msdn.microsoft.com/fr-fr/libr...89(VS.80).aspx

    jjameau

  3. #3
    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.

    Maheureusement ce n'est pas ça du tout. Mon souci vient sur la récupération et surtout la réutilisation du type de l'objet envoyé.

    En fait, mon objet lst peut être soit une DropDownList, soit une CheckBoxList, soit un RadiobuttonList. Même si ces objets sont assez similaires, ils ont des particularités que je ne peux exploiter que si je capte leur type en amont.

    Vois tu mieux ?

  4. #4
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Et sinon, tu as essayé avec Convert.ChangeType(Object,Type) ?

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Par défaut
    ah ok, dans ce cas tu as essayé de récupérer le type avec la méthode GetType() ?

    jjameau

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    lst.GetType()

  7. #7
    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 LuteceFalco et jjameau : GetType(), oui, ça récupère le type, mais ça passe pas comme argument dans un Ctype.

    @smyley : je ne connais pas cette méthode.

    Donc, j'ai mis ça dans ma Procédure, mais visiblement, ça marche mal.
    Je pense que je dois louper une truc dans la philosophie de l'histoire.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Shared Sub RemplirListe(ByRef lst As Object, ByVal rq As String)
    	Dim dt As DataTable = New DManager("DataDev").RetournerTable(rq)
    	Convert.ChangeType(lst, lst.GetType)
    	lst.Items.Clear()
    	lst.DataSource = dt
    End Sub
    Le problème, c'est que ça marche pas, DataSource ne fait pas partie des Propriété de l'objet lst. Alors je me suis dit que peut être fallait passer par un objet intermédiaire, mais là je sèche, j'arrive pas à trouver l'enchainement.

    Parce que l'idée, pour aller plus loin, c'est de dire que si c'est une Drop, ben on renvoi ça tel que, si c'est une Radio ben lui envoi un sens de listage (Horizontale ou vertical) avec sa propriété RepeatDirection (par exemple)

    Mais pour ça faut que je Cast l'objet lst et que je capte son type pour faire un Case (par exemple). J'ai aussi imaginer faire une sort de surcharge de la procédure (trois fois) selon le type d'objet, mais je me suis paumé en route avec les listes de paramettre commun et particulier.

  8. #8
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Je verrais plutot un truc comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    switch lst.GetType
       case CheckBoxList
            dim cbl as CheckBoxList
            cbl = CType(lst, CheckBoxList)
            cbl.DataSource = ...

  9. #9
    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
    ça c'était mon premier essai, amis le type ne veux pas passer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select Case lst.GetType
    	Case DropDownList 'Erreur	1	'DropDownList' est un type et ne peut pas être utilisé en tant qu'expression.	
    End Select
    Je t'ai rajouter le commentaire d'erreur renvoyé.
    Ensuite j'ai essayé avec le GetyPe().ToString et mettre le nom du type dans les Case, sous forme de string, mais je me suis aperçu que ça marchait, il passe pas dans le Case.

    Et enfin, j'ai pas d'idée sur comment renvoyer ça compte tenu du fait que mon paramettre d'entrée en ByRef.

    Vois tu ?

  10. #10
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Et ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    switch lst.GetType().ToString()
       case "System.Web.UI.WebControls.CheckBoxList"

  11. #11
    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
    Bon alors j'avance doucement, mais ça marche toujours pas.

    J'en suis là :
    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
     
    Public Shared Sub RemplirListe(ByRef lstParam As Object, ByVal rq As String)
    Dim dt As DataTable = New DManager("DataDev").RetournerTable(rq)
    	Select Case lstParam.GetType.ToString
    		Case "System.Web.UI.WebControls.CheckBoxList"
    		Dim lst As DropDownList = lstParam
    		With lst
    			.Items.Clear()
    			.DataSource = dt
    			.DataTextField = "Texte"
    			.DataValueField = "Valeur"
    			.DataBind()
    		End With
    		Case Else
    			Logage("J'ai rien capté")
    	End Select
    End Sub
    Dans mon fichier de log, j'ai mon entreé : "J'ai rien capté"

    J'avoue que là, je sèche.

    PS : @LuteceFalco, tu auras remarqué mon aisance à transformer ton C# en VB.NET, j'ai évité ton piège et potassé ton lien et le petit machin vachement bien proposé par seth78, ha, ha, je deviens grand......

  12. #12
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Avant ton Select Case, rajoute:
    Logage(lstParam.GetType.ToString)

  13. #13
    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
    Bon, ok, je viens de flagellé violement.
    Lorsqu'on commence à mélanger les pommes et le bananes, ben la compote elle est moins bonne !

    Donc, en faisant ce que tu m'a dis, j'ai vu que je tentait de faire une DropDownist avec une CheckBoxLsit, donc...

    Maintenant, ça marche mieux.

    Je vais finir ma procédure pour utiliser tous les paramaettres et si ça marche, je boucle.

    Merci à tous.

  14. #14
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Pourquoi passer par un paramètre object, alors qu'il existe les generics pour gérer ce genre de cas ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  15. #15
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Avec ce genre de test, ca ne marche pas ?

    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
        Private Sub Test1()
            Dim t As New System.Windows.Forms.TextBox
            Test2(t)
            Dim c As New System.Windows.Forms.CheckBox
            Test2(c)
        End Sub
     
        Private Sub Test2(ByRef lstParam As Object)
            If lstParam.GetType Is GetType(System.Windows.Forms.TextBox) Then
                Console.WriteLine("TextBox")
            ElseIf lstParam.GetType Is GetType(System.Windows.Forms.CheckBox) Then
                Console.WriteLine("CheckBox")
            Else
                Console.WriteLine("Ben, je ne sais pas !!!!")
            End If
        End Sub

    Citation Envoyé par SaumonAgile Voir le message
    Pourquoi passer par un paramètre object, alors qu'il existe les generics pour gérer ce genre de cas ?
    D'après ce que j'ai compris de la question, il veut faire des actions différentes en fonction du type et les generics, c'est plutot faire les mêmes actions quel que soit le type. Ou alors j'ai pas bien compris !!!

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/11/2005, 09h35
  2. Renvoyer un type structuré dans objet OLE
    Par Bleuarff dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 13/05/2005, 20h05
  3. [Language]Type d'un objet null
    Par Calambo dans le forum Langage
    Réponses: 8
    Dernier message: 26/04/2005, 10h06
  4. [POO] Comment connaître le type d'un objet
    Par zizou39 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/03/2005, 09h46
  5. Comment detecter le type d'un objet?
    Par nickylarson dans le forum C++Builder
    Réponses: 3
    Dernier message: 24/06/2003, 15h23

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