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

C++/CLI Discussion :

source de données objet


Sujet :

C++/CLI

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut source de données objet
    Salut,
    je travaille sur un reportviewer avec Visual Studio 2005 en c++
    J'essaye de crée une classe c++ pour pouvoir l'ajouter en tant que nouvelle source de données de type Objet.

    Je n'ai réussi qu'a trouver un exemple en C# sur msdn : http://msdn.microsoft.com/fr-fr/libr...92(VS.80).aspx

    Le code se raportant à la classe codé en C# :
    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
    public class Product
    {
        private string m_name;
        private int m_price;
     
        public Product(string nom, int prix)
        {
            m_name = nom;
            m_price = prix;
        }
     
        public string Nom
        {
            get
            {
                return m_name;
            }
     
        }
     
        public int Prix
        {
            get
            {
                return m_price;
            }
        }
    }
    Quand j'ajoute cette classe en tant que nouvelle source de données de type Objet dans un projet c# sa marche puisque j'ai deux données disponible dans la source de donées Product (Prix et Nom)


    Maintenant dans un projet c++ je crée une classe avec :
    dans le fichier.h :
    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
    #include <string>
    using namespace std;
     
    public class CProduct
    {
    public:
     
    	CProduct(void);
     
    	~CProduct(void);
     
    	int Prix(void);
     
    	string Nom(void);
     
    private:
    	int prix;
    	string nom;
    };
    et dans le fichier.cpp :
    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
    #include "Product.h"
     
    CProduct::CProduct(void)
    {
    }
     
    CProduct::~CProduct(void)
    {
    }
     
    int CProduct::Prix(void)
    {
    	return this->prix;
    }
     
    string CProduct::Nom(void)
    {
    	return this->nom;
    }
    Alors la par contre quand j'ajoute cette classe en tant que nouvelle source de données de type Objet dans mon projet c++ je n'ai pas les deux données Prix et Nom.
    Voila je ne sais pas trop comment m'y prendre ...
    Merci de votre aide !

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut
    Je viens de remarquer que en fait en C# Prix et Nom sont des propriétées associées au attributs m_name et m_price.
    Est il possible de créer des propriétées en c++ ?

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pas en C++ natif.
    En C++ pour le framework .Net (Managed C++ ou bien C++/CLI), par contre, aucun problème.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Voici une traduction de la classe en C++/CLI:
    Code C++/CLI : 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
    public ref class Product
    {
    private:
    	System::String ^m_name;
    	int m_price;
     
    public:
    	Product(System::String ^nom, int prix);
     
    	property System::String^ Nom
    	{
    		System::String^ get();
    	}
     
    	property int Prix
    	{
            	int get();
    	}
    };
    Code C++/CLI : 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
    #include "product.h"
    using namespace System;
     
    Product::Product(String ^nom, int prix)
    {
    	m_name = nom;
    	m_price = prix;
    }
     
    String^ Product::Nom::get()
    {
    	return m_name;
    }
     
    int Product::Prix::get()
    {
    	return m_price;
    }
    Je n'ai pas testé, mais il me semble bien que c'est ça...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut
    oui justement j'étais sur cette piste du mot clef property
    http://dotnet.developpez.com/faq/cpp...erloadoperator

    c'est super ce site y a plein de chose le seul problème c'est de savoir quoi chercher

    merci Médinoc

    je test ça tout de suite

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut
    Bon sa marche trés bien c parfait mais j'ai encore des problèmes pour la suite du code à savoir transformer la classe Merchant vers du c++
    classe Merchant C#:
    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 class Merchant
    {
        private List<Product> m_products;
     
        public Merchant()
        {
            m_products = new List<Product>();
            m_products.Add(new Product("Stylo", 25));
            m_products.Add(new Product("Pinceau", 30));
            m_products.Add(new Product("Cahier", 15));
        }
     
        public List<Product> GetProducts()
        {
            return m_products;
        }
    }
    Classe Merchant C++
    fichier.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "Product.h"
    using namespace System;
    using namespace System::Collections::Generic;
     
    public ref class Merchant
    {
    private: 
    	System::Collections::Generic::List<Product> m_products;
     
    public: 
    	Merchant(void);
    	System::Collections::Generic::List<Product> GetProducts(void);
    };
    fichier.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "Merchant.h"
     
    Merchant::Merchant(void)
    {
    }
     
    System::Collections::Generic::List<Product> Merchant::GetProducts(void)
    {
    	return this->m_products;
    }
    Enfin bref de gros problème avec ce List de malheur ...

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Code C++/CLI : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "Product.h"
     
    public ref class Merchant
    {
    private: 
    	System::Collections::Generic::List<Product^>^ m_products;
     
    public: 
    	Merchant(void);
    	System::Collections::Generic::List<Product^>^ GetProducts(void);
    };
    Code C++/CLI : 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
    #include "Merchant.h"
    using namespace System;
    using namespace System::Collections::Generic;
     
    Merchant::Merchant(void)
    {
    	m_products = gcnew List<Product^>();
    	m_products->Add(gcnew Product("Stylo", 25));
    	m_products->Add(gcnew Product("Pinceau", 30));
    	m_products->Add(gcnew Product("Cahier", 15));
    }
     
    List<Product^>^ Merchant::GetProducts(void)
    {
    	return this->m_products;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut
    Bon voila je suis arrivé au bout, le rapport s'affiche enfin !
    Merci à Médinoc !!!

    Pour ceux qui ont les mêmes problèmes et qui auront la chance de tomber içi :
    Je rappel que c'est pour un projet Windows Form avec Visual Studio et le langage C++ !

    Les liens utiles :
    Infos sur les rapports en local et notamment, la procédure à suivre pour ajouter un fichier .rdlc dans un projet Windows C++ non managé (en fin de page):
    http://msdn.microsoft.com/fr-fr/library/ms251704.aspx

    L'exemple C# que l'on va transposer en C++/CLI :
    http://msdn.microsoft.com/fr-fr/libr...84(VS.80).aspx

    Et enfin la bonne FAQ de Developpez.com sur le C++/CLI :
    http://dotnet.developpez.com/faq/cppcli/


    Petite modif dans
    Merchant.cpp
    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
    #include "Merchant.h"
     
    Merchant::Merchant(void)
    {
        m_products = gcnew List<Product^>();
    	m_products->Add(gcnew Product("Stylo", 25));
    	m_products->Add(gcnew Product("Pinceau", 30));
    	m_products->Add(gcnew Product("Cahier", 15));
     
    }
     
    List<Product^>^ Merchant::GetProducts(void)
    {
    	return this->m_products;
    }
    Dans la classe Form1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private :Merchant^ m_merchant;
    Dans le TODO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_merchant= gcnew Merchant();
    Et dans la méthode Form1_Load() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) 
    {
    				 // Bind the Product collection to the DataSource.
    				 this->ProductBindingSource->DataSource=this->m_merchant->GetProducts();
    				 this->reportViewer1->RefreshReport();
    }
    Voila pour le code à rajouter, ensuite il faut suivre la procédure pour ajouter le fichier .rdlc dans un projet Windows C++ non managé (voir lien plus haut) et enfin dans le reportviewer choisir le rapport, si besoin relier les sources de données (en dessous du choix du rapport).
    Normalement on arrive à deux BidingSource celui de la classe Product (ProductBidingSource) et de Form1 (Form1BidingSource).
    Je sais pas trop pourquoi il a besoin de Form1BidingSource mais sans ça le reportviewer n'affiche rien.

    Bon voila l'un dans l'autre ça devrais fonctionner pour vous aussi.
    Sa serait pas mal d'ajouter un tuto pour les reportviewer parque c'est super pratique pour afficher ce qu'on veux (tableau, toute sorte de graphique ...)
    Maintenant je dois adapter ça avec un gros tableau de string en 2D du type string ** on va voir ce que ça donne.

Discussions similaires

  1. Common Language Runtime (CLR) et source de données objet
    Par Sekhmett dans le forum VC++ .NET
    Réponses: 0
    Dernier message: 24/06/2008, 17h41
  2. Réponses: 8
    Dernier message: 15/08/2007, 13h07
  3. [CR VS 2005] Source de données Objet .net
    Par Cereal123 dans le forum SDK
    Réponses: 4
    Dernier message: 08/03/2007, 10h46
  4. Connexion à une source de données pour un objet pivotTable
    Par totocasagrandi dans le forum Access
    Réponses: 2
    Dernier message: 12/01/2007, 10h45
  5. [Crystal Report 8] créer une source de données oracle
    Par Lina dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 14/11/2002, 13h53

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