none
Tableau de gestion

    Question

  • Bonjour,

     

    Je commence un projet, je voudrais faire un système de gestion d'inventaire, je suis en Visual C# et je cherche le meilleur tableau pour générer des lignes dans lesquels les information de stock seront contenu. Je vais ensuite faire que chaque lignes et chaque items de chaque ligne (une lignes = 1 items en stock) seront sauvegarder dans un fichier XML. Qui pourra ensuite être lu pour affichier l'inventaire.

    Je ne veux pas un code tout beau, tout propres ;), mais plutôt la meilleur manière de faire un beau tableau sur lequel je peux sélectionner une ligne et la changer.

    Pour le moment j'utilise "DataGird" mais je n'est pas encore trouvé comment écrire dans une ligne.

     

    Et j'aurais une toute petite question de plus,

    Je souhaite appeler Form1 depuis Form2,

    Form1 form1 = new Form1();

     

    Mais il me dit StackOverFlowException ou un truc dans le genre,

    boucle infinie, bref je cherche depuis un moment mais je ne trouve pas, si vous pouviez m'aider. :P

     

    Merci d'avance :P


    Cordiallement Édouard

    • Modifié Édouard jeudi 5 janvier 2012 05:18
    jeudi 5 janvier 2012 03:16

Réponses

  • Bonjour,

     

    Si j'ai bien compris tu veux appeler Form1 existante depuis une fenêtre Form2.

    La solution la plus simple à mon avis est d'avoir recours aux délégués :

    dans Form2

    public delegate void MonTraitement();

    public event MonTraitement OnMonTraitement;

    ...

    ...

    Dans une méthode de Form1 avec condition par exemple :

    if (....) { OnMontraitement(); }

     

    Dans Form1

     

    On instancie Form2 :

    Form Form2 = new Form();

    puis on s'abonne à l'évèvement :

    Form2.OnMontraitement += new Form2.MonTraitement(Form2_OnMontraitement);

    puis

    void Form2_OnMontraitment()

    {

    .... <-- Code suite à l'appel depuis Form2

    }

     

    J'espère avoir répondu à ta question.

    Bon courage

    • Marqué comme réponse Édouard mardi 10 janvier 2012 23:00
    jeudi 5 janvier 2012 08:55
  • Bonjour,

    Pour ce qui est de la gestion de votre collection de lignes, le mieux adapté serait d'utiliser une structure List<Ligne>, avec Ligne comme type de donnée représentant vos lignes. Avec un objet List vous pouvez faire aisément toutes les opérations sur une collection (Insertion, Suppression, Parcourt, Accès à un élément, ..) :http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

     

    Pour ce qui est de la persistance de vos lignes, le plus simple serait d'utiliser la technologie de sérialisation Xml : http://msdn.microsoft.com/fr-fr/library/system.xml.serialization.xmlserializer(v=VS.100).aspx

     

    Quand au problème d'appel d'un autre Form : L'exception StackOverFlowException ne peut résulter dans votre cas que d'un appel circulaire et ne doit pas en aucun cas être lié au fait que vous instancier une class Form1 dans une autre classe Form2 car finalement ce sont des classes comme les autres. Vous devez plutôt mettre un point d'arrêt sur l'instruction Form1 form1 = new Form1(); et faire un pat à pat pour l'appel circulaire qu'il doit y avoir ou sinon regarder le stack trace de l'exception quand elle est levée.

    Cordialement.

    • Marqué comme réponse Édouard mardi 10 janvier 2012 22:59
    jeudi 5 janvier 2012 11:10
  • Bonjour,

    en effet le datagridview semble être la meilleure solution

    les membres de la classe sont ici:

    http://msdn.microsoft.com/fr-fr/library/microsoft.office.tools.excel.controls.datagridview_members%28v=VS.90%29.aspx

    Il faut définir la source du DatagridView avec un dataset et travailler sur le dataset.

     

    Il faut instancier la classe Form et pas Form1

    car Form1 est une instance de la classe Form

    Form form2 = new Form();

     


    fred on youTube
    PHP MySQL Web Site Creator
    fred
    • Marqué comme réponse Édouard mardi 10 janvier 2012 22:59
    jeudi 5 janvier 2012 08:27

Toutes les réponses

  • Bonjour,

    en effet le datagridview semble être la meilleure solution

    les membres de la classe sont ici:

    http://msdn.microsoft.com/fr-fr/library/microsoft.office.tools.excel.controls.datagridview_members%28v=VS.90%29.aspx

    Il faut définir la source du DatagridView avec un dataset et travailler sur le dataset.

     

    Il faut instancier la classe Form et pas Form1

    car Form1 est une instance de la classe Form

    Form form2 = new Form();

     


    fred on youTube
    PHP MySQL Web Site Creator
    fred
    • Marqué comme réponse Édouard mardi 10 janvier 2012 22:59
    jeudi 5 janvier 2012 08:27
  • Bonjour,

     

    Si j'ai bien compris tu veux appeler Form1 existante depuis une fenêtre Form2.

    La solution la plus simple à mon avis est d'avoir recours aux délégués :

    dans Form2

    public delegate void MonTraitement();

    public event MonTraitement OnMonTraitement;

    ...

    ...

    Dans une méthode de Form1 avec condition par exemple :

    if (....) { OnMontraitement(); }

     

    Dans Form1

     

    On instancie Form2 :

    Form Form2 = new Form();

    puis on s'abonne à l'évèvement :

    Form2.OnMontraitement += new Form2.MonTraitement(Form2_OnMontraitement);

    puis

    void Form2_OnMontraitment()

    {

    .... <-- Code suite à l'appel depuis Form2

    }

     

    J'espère avoir répondu à ta question.

    Bon courage

    • Marqué comme réponse Édouard mardi 10 janvier 2012 23:00
    jeudi 5 janvier 2012 08:55
  • Bonjour,

    pour l'exception de type StackOverflow vérifier que vous n'etes pas dans les situations de type :

    - Form1 crée une Form2 qui crée une Form1 ....

    - Form1 crée une nouvelle Form 1 qui crée une nouvelle Form 1....

    ceci peut notamment être le cas si vous avez ajouter du code pour créer Form1 au sein des constructeurs par exemple.

    Si besoin ajouter un exemple de code qui reproduit le problème pour que nous puissions vous aidez.

    Cordialement.

     

    jeudi 5 janvier 2012 09:47
  • Bonjour,

    Pour ce qui est de la gestion de votre collection de lignes, le mieux adapté serait d'utiliser une structure List<Ligne>, avec Ligne comme type de donnée représentant vos lignes. Avec un objet List vous pouvez faire aisément toutes les opérations sur une collection (Insertion, Suppression, Parcourt, Accès à un élément, ..) :http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

     

    Pour ce qui est de la persistance de vos lignes, le plus simple serait d'utiliser la technologie de sérialisation Xml : http://msdn.microsoft.com/fr-fr/library/system.xml.serialization.xmlserializer(v=VS.100).aspx

     

    Quand au problème d'appel d'un autre Form : L'exception StackOverFlowException ne peut résulter dans votre cas que d'un appel circulaire et ne doit pas en aucun cas être lié au fait que vous instancier une class Form1 dans une autre classe Form2 car finalement ce sont des classes comme les autres. Vous devez plutôt mettre un point d'arrêt sur l'instruction Form1 form1 = new Form1(); et faire un pat à pat pour l'appel circulaire qu'il doit y avoir ou sinon regarder le stack trace de l'exception quand elle est levée.

    Cordialement.

    • Marqué comme réponse Édouard mardi 10 janvier 2012 22:59
    jeudi 5 janvier 2012 11:10
  • Bonjour, Edouard,

     

    Est-ce que vous avez testé les solutions proposées ? Merci de tenir la communauté informée sur la suite de vos démarches.

     

    Cordialement,

     

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    lundi 9 janvier 2012 08:20
  • Bonjour,

    Ta liste est sur une autre fenetre différente de la fenetre princiale.

    Si c'est pas le cas tu peux créer un nouveau constructeur de cette fenêtre contenant la liste et faire l'appel de cette calsse (fenetre) à l'endroit adequat.

    Bon courage.

    merci

     


    So B
    mardi 10 janvier 2012 08:52
  • Salu Mourad ,

    Ta proposition est vraiment pertinente mais je pense c'est mieux qu'il fasse un mécanisme de binding classic.

    Cdl


    So B
    mardi 10 janvier 2012 09:00
  • Salut So B,

    Je suis d'accord que le mieux et le plus simple serait d'utiliser un mécanisme de binding classic pour gérer la manipulation de ses données via l'interface, là aussi une Liste<Ligne> est bien adaptée comme source de données.

     

    Cdt.

    mardi 10 janvier 2012 12:27