Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Candidat au titre de Membre du Club
    Homme Profil pro Eric Primault
    Développeur informatique
    Inscrit en
    octobre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Primault
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2012
    Messages : 30
    Points : 10
    Points
    10

    Par défaut Tri dans une gridview

    J'ai une Gridview pour laqu'elle je souhaite trier par le Chiffre d'affaire.
    Mais lors du Databind , j'ai le message d'erreur :
    "La méthode System.Decimal get_chiffre_affaire ne prend pas en charge la traduction en SQL."

    Voici le code :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    GridView_societes.DataSource = db.T30_Societes
                    .Where(s => s.ClePromoteur1 == (Master as prive).get_id_individu()
                                || s.ClePromoteur2 == (Master as prive).get_id_individu()
                          )
                    .Select(soc =>
                    new
                    {
                        ID_Societe = soc.ID_Societe,
                        NomSociete = soc.NomSociete,
                        Adr1 = soc.Adr1,
                        Adr2 = soc.Adr2,
                        Ville = soc.Ville,
                        CA = utils.montant_to_str(utils.get_chiffre_affaire(db, soc))
                    }
                    ).OrderByDescending(s => s.CA);
     
                GridView_societes.DataBind();
    Merci de votre aide

  2. #2
    Membre Expert

    Homme Profil pro John Doe
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Nom : Homme John Doe
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 1 113
    Points : 1 999
    Points
    1 999

    Par défaut

    Et si tu fais la même requête sans le select ?

  3. #3
    Candidat au titre de Membre du Club
    Homme Profil pro Eric Primault
    Développeur informatique
    Inscrit en
    octobre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Primault
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2012
    Messages : 30
    Points : 10
    Points
    10

    Par défaut

    Le problème est essentiellement du au tri sur le CA. un orderby.NomSociete à la place du tri sur le CA fonctionne très bien.
    A mon sens il faudrait définir une instruction de tri sur le CA mais je ne sais pas comment faire simple.
    Si vous avez une idée, je suis preneur.

  4. #4
    Membre Expert

    Homme Profil pro John Doe
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Nom : Homme John Doe
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 1 113
    Points : 1 999
    Points
    1 999

    Par défaut

    Ton CA correspond à quoi, à une classe personnalisé ???
    Si c'est le cas faut que tu crée une classe qui implémente IComparer et dans la méthode Compare de cette classe tu spécifie comment tu veux comparer tes objets.

  5. #5
    Candidat au titre de Membre du Club
    Homme Profil pro Eric Primault
    Développeur informatique
    Inscrit en
    octobre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Primault
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2012
    Messages : 30
    Points : 10
    Points
    10

    Par défaut

    ce n'est pas une classe, c'est juste le résultat d'une requête.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            public static decimal get_chiffre_affaire(DataClasses_FormosDataContext db, T30_Societes societe)
            {
                // Vérifier s'il existe au moins une inscription pour faire le cumul
                var inscriptions = db.T06_Inscriptions.Where(i => i.cleSociete == societe.ID_Societe && i.dateAnnulation == null && ( i.flagReport == null ||  i.flagReport == false )).ToList();
     
                if (inscriptions.Count() > 0)
                {
                    return db.T06_Inscriptions.Where(i => i.cleSociete == societe.ID_Societe && i.dateAnnulation == null && (i.flagReport == null || i.flagReport == false)).Sum(s => s.prixvente);
                }
                else return ( decimal ) 0;
            }
    Je pensais qu'il y avait une solution plus simple pour juste trier une chaine de caractères

  6. #6
    Membre Expert

    Homme Profil pro John Doe
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Nom : Homme John Doe
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 1 113
    Points : 1 999
    Points
    1 999

    Par défaut

    ton utils.montant_to_str ne fait que mettre une valeur décimal sous la forme d'un string ?
    Essaye ça:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    var requete = db.T30_Societes
                    .Where(s => s.ClePromoteur1 == (Master as prive).get_id_individu()
                                || s.ClePromoteur2 == (Master as prive).get_id_individu()
                          )
                    .Select(soc =>
                    new
                    {
                        ID_Societe = soc.ID_Societe,
                        NomSociete = soc.NomSociete,
                        Adr1 = soc.Adr1,
                        Adr2 = soc.Adr2,
                        Ville = soc.Ville,
                        CA = utils.get_chiffre_affaire(db, soc)
                    }
                    ).ToList();
     
    GridView_societes.DataSource =requete.OrderByDescending(s => s.CA);

  7. #7
    Candidat au titre de Membre du Club
    Homme Profil pro Eric Primault
    Développeur informatique
    Inscrit en
    octobre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Primault
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2012
    Messages : 30
    Points : 10
    Points
    10

    Par défaut

    En effet, la fonction utils.montant_to_str ne sert qu'à mettre en forme le montant.
    Mais ta solution est bonne. L'idée de scinder la recherche d'informations et le tri est très pratique.
    Merci beaucoup

  8. #8
    Membre Expert

    Homme Profil pro John Doe
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Nom : Homme John Doe
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 1 113
    Points : 1 999
    Points
    1 999

    Par défaut

    Le faite de faire un tolist va exécuter la requête, ce qui fait que quand tu vas faire ton orderby dans ton CA tu aura une valeur décimale et pas l'appel de la méthode get_chiffre_affaire (c'est ce qui posait problème).

  9. #9
    Candidat au titre de Membre du Club
    Homme Profil pro Eric Primault
    Développeur informatique
    Inscrit en
    octobre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Primault
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : octobre 2012
    Messages : 30
    Points : 10
    Points
    10

    Par défaut

    Merci de ton aide

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •