Précédent   Forum du club des développeurs et IT Pro > Dotnet > Développement Web avec .NET > ASP.NET
ASP.NET ASP.NET -Forum d'entraide sur le Développement Web en ASP.NET. Avant de poster -> FAQ ASP.NET, Articles ASP.NET
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/12/2012, 18h03   #1
ERICLEUN
Invité régulier
 
Homme Eric Primault
Développeur informatique
Inscription : octobre 2012
Messages : 24
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 : 24
Points : 7
Points : 7
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
ERICLEUN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 20h42   #2
youtpout978
Membre Expert
 
Homme John Doe
Développeur .NET
Inscription : novembre 2010
Messages : 911
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 : 911
Points : 1 457
Points : 1 457
Et si tu fais la même requête sans le select ?
youtpout978 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 08h35   #3
ERICLEUN
Invité régulier
 
Homme Eric Primault
Développeur informatique
Inscription : octobre 2012
Messages : 24
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 : 24
Points : 7
Points : 7
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.
ERICLEUN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 09h21   #4
youtpout978
Membre Expert
 
Homme John Doe
Développeur .NET
Inscription : novembre 2010
Messages : 911
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 : 911
Points : 1 457
Points : 1 457
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.
youtpout978 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 11h21   #5
ERICLEUN
Invité régulier
 
Homme Eric Primault
Développeur informatique
Inscription : octobre 2012
Messages : 24
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 : 24
Points : 7
Points : 7
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
ERICLEUN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 14h38   #6
youtpout978
Membre Expert
 
Homme John Doe
Développeur .NET
Inscription : novembre 2010
Messages : 911
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 : 911
Points : 1 457
Points : 1 457
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);
youtpout978 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 16h28   #7
ERICLEUN
Invité régulier
 
Homme Eric Primault
Développeur informatique
Inscription : octobre 2012
Messages : 24
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 : 24
Points : 7
Points : 7
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
ERICLEUN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 16h57   #8
youtpout978
Membre Expert
 
Homme John Doe
Développeur .NET
Inscription : novembre 2010
Messages : 911
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 : 911
Points : 1 457
Points : 1 457
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).
youtpout978 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 11h27   #9
ERICLEUN
Invité régulier
 
Homme Eric Primault
Développeur informatique
Inscription : octobre 2012
Messages : 24
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 : 24
Points : 7
Points : 7
Merci de ton aide
ERICLEUN est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h05.


 
 
 
 
Partenaires

Hébergement Web