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

Windows Forms Discussion :

[C# 2]Conseil pour DatagridView


Sujet :

Windows Forms

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut [C# 2]Conseil pour DatagridView
    Salut à tous.

    Dans le cadre du développement d'une petite application de gestion de compte bancaire, j'ai créé un objet représentant une opération bancaire dont voici les grandes lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Operation
    {
        // .....
        private double _montant;
     
        public double Montant
        {
             get { return _montant; }
             set { _montant = value; }
        }
        //..... suite de mon code
    }
    J'ai ensuite un DataGridView permettant d'afficher une liste d'opération. J'utilise pour cela un composant BindingSource dont le DataSource est une liste d'objet Operation : List<Operation>

    Cependant, mon DataGridView ne doit pas se contenter d'afficher une colonne "Montant" avec le montant (positif ou négatif) de l'opération, mais deux colonnes : Débit et Crédit dans lesquelles je mais respectivement les montant négatifs et positifs. J'ai donc créer pour ce faire un colonne "personnalisée" dans mon DataGridView.

    Mais comme je l'avais expliqué dans un précédent post (toujours resté sans réponses d'ailleur : http://www.developpez.net/forums/sho....php?t=159936), j'ai un PB de rafraichissement avec ces 2 colonnes.

    Je pensais donc m'orienter vers une autre solution qui consisterais à créer un autre objet (disont LigneOperation) contenant 2 propriétés : Debit et Credit et destiné uniquement à l'alimentation de mon GridView.

    Par contre, je me demande comment je vais pouvoir gérer les ajout / modif d'opérations dans ma couche de persistance vu que je n'utiliserait pas directement mon objet Operation.

    Si quelqu'un aurait une solution à me donner ou une proposition d'architecture à me soumettre, je suis ouvert.
    Sachant que de préférence, je préfèrerais résoudre mon PB de rafraichissement (post précédent) car du coup pas besoi de tout redévelopper.

    Merci

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    up

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2003
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    pour ma réponse, je vais supposer que tu utilises un objet de "type" bindingsource pour lier ton datagridview à ton objet.

    Dans ce cas, et si j'ai bien saisi ton problème, il te suffit de rajouter cette ligne dans l'évènement "CellValueChanged" de ton datagridview :

    MonObjetBindingSource.ResetCurrentItem();

    de cette manière tu forces la mise à jour de tout tes composants d'interfaces liés à MonObjetBindingSource. Fait attention tout de même car ce genre de méthode insensible sur un "petit" formulaire pourrait coûter cher sur une grille importante.
    par ailleurs, je ne sois pas sûr que ce soit de faire une bonne pratique que de procéder ainsi, mais bon, ca fonctionne...

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    je vais supposer que tu utilises un objet de "type" bindingsource pour lier ton datagridview à ton objet.
    C'est effectivement le cas

    il te suffit de rajouter cette ligne dans l'évènement "CellValueChanged" de ton datagridview :

    MonObjetBindingSource.ResetCurrentItem();
    ouai mais nan. En fait j'ai déjà essayé, mais ça ne rafraichit pas mes colonnes "calculées". Pour qu'elles se rafraichissent, je suis obligé de faire un bindingSource.ResetBinding(), donc sur TOUT le datagridview !!

  5. #5
    Membre habitué Avatar de meli0207
    Inscrit en
    Novembre 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2004
    Messages : 208
    Points : 133
    Points
    133
    Par défaut
    Attention, il est écrit dans la msdn :
    The DataGridView class supports the standard Windows Forms data-binding model. This means the data source can be of any type that implements one of the following interfaces:
    The IList interface, including one-dimensional arrays.
    The IListSource interface, such as the DataTable and DataSet classes.
    The IBindingList interface, such as the BindingList class.
    The IBindingListView interface, such as the BindingSource class.
    J'ai eu un probleme avec un DataGridView dont la DataSource etait une liste générique, j'ai finalement opté pour un ArrayList

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    La classe generic List<T> implémente l'interface IList, donc pas de PB avec le DatagridView. Le PB vient d'ailleur...

  7. #7
    Membre habitué Avatar de meli0207
    Inscrit en
    Novembre 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2004
    Messages : 208
    Points : 133
    Points
    133
    Par défaut
    Effectivement, je viens de vérifier, List<> implemente IList
    mon problème ne venait donc pas de la non plus...

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/07/2003, 16h04
  2. Conseils pour developper une application avec Oracle
    Par belugha dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 02/06/2003, 16h03
  3. Cherche conseil pour choisir mon orientation.
    Par AslDice dans le forum Débuter
    Réponses: 6
    Dernier message: 24/04/2003, 17h07
  4. Conseils pour poser votre question...
    Par Community Management dans le forum XMLRAD
    Réponses: 0
    Dernier message: 30/01/2003, 16h58
  5. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 15h35

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